Подсчет кодонов ДНК в файле ДНК

Если вы хотите запустить его из /bin/shскрипта:

#!/bin/sh

# the users to avoid
set -- user1 user2 user3 user4

# create a list of 
# -o -user "username" -o -user "username" etc.
for user do
    set -- "$@" -o -user "$user"
    shift
done
shift # remove that first "-o"

# use the created array in the call to find
find. -maxdepth 1 -type d -name '*_pattern_*' ! '(' "$@" ')'

В качестве альтернативы, чтобы создать такой же ! -user "username"список, который вы используете:

#!/bin/sh

# the users to avoid
set -- user1 user2 user3 user4

# create a list of 
# ! -user "username" ! -user "username" etc.
for user do
    set -- "$@" ! -user "$user"
    shift
done

# use the created array in the call to find
find. -maxdepth 1 -type d -name '*_pattern_*' "$@"
3
12.04.2020, 18:46
3 ответа
(echo aacacgaactttaacacg ;echo aacacgaactttaacacg ) |
  perl -ne '# Split input into triplets (A3)
            # use each triplet as key in the hash table count
            #   and increase the value for the key
            map { $count{$_}++ } unpack("(A3)*",$_);
            # When we are at the end of the file
            END{ 
                 # Remove the key "" (which is wrong)
                 delete $count{""};
                 # For each key: Print key, count
                 print map { "$_ $count{$_}\n" } keys %count
            }'
3
19.03.2021, 02:29

Чуть более длинная -намотанная awkверсия

awk 'BEGINFILE{print FILENAME; delete codon}
     ENDFILE {
     if (NR!=1 || NF!=1 || length($0)%3!=0){
         print "is broken"}
     else{
         for (i=1; i<=length($0); i+=3) codon[substr($0,i,3)]++}; 
         for (c in codon) print c, codon[c]; 
         print ""}' file*

Для этого входа

файл1 :ОК

aacacgaactttaacacg

файл2 :пробел

aacacgaact ttaacacg

файл3 :разрыв строки

aacacgaact
ttaacacg

файл4 :не кратно 3 основаниям

aacacgaactttaacac

Вы получаете

file1
aac 3
ttt 1
acg 2

file2
is broken

file3
is broken

file4
is broken

Если вы просто хотите восстановить файлы и у вас нет таких файлов, как file4, тогда catваши файлы через trс одного конца awkили с другого, как в вашем примере

<<< $(cat file[1..3] | tr -d "\n ")
1
19.03.2021, 02:29

Вы получаете этот вывод, потому что первая строка вашего скрипта запускает новую bashоболочку.

Эта строка должна читаться как

#!/bin/bash

(обратите внимание на #в начале ).

Затем вы смешиваете синтаксис awkс кодом оболочки таким образом, что это никогда не сработает.

Вместо этого не усложняйте задачу и разбейте файл на группы по три символа, отсортируйте их и подсчитайте, сколько уникальных символов вы получите:

$ fold -w 3 dnafile | sort | uniq -c
   3 aac
   2 acg
   1 ttt

Это будет работать, если ввод всегда содержит кратное трем символам без пробелов или других символов.

9
19.03.2021, 02:29

Теги

Похожие вопросы