Найти, сколько раз возникает определенная базовая последовательность ДНК в файле

Было обнаружено, что проблема не связана с смещением BBT, как указывалось ранее. Источником проблемы было использование squashfs, как сказано в этой ссылке:

http://elinux.org/Support_read-only_block_filesystems_on_MTD_flash

Решением было бы либо использовать другую файловую систему, либо использовать UBI для обнаружения плохие блоки.

-1
14.10.2018, 22:10
2 ответа

Легко сопоставить последовательность tttи сообщить количество совпадений:

$ echo 'aaccgtttgtaaccggaac' | grep -o 'ttt' | wc -l

Или, если последовательность находится в файле:

$ echo 'aaccgtttgtaaccggaac'>dnafile
$ grep -o 'ttt' dnafile | wc -l
1

$ grep -o 'aac' dnafile | wc -l
3

Итак, все, что вам нужно сделать, это закодировать эту идею в скрипте bash:

#!/bin/bash
dnafile=${1-./dnafile}                   # Name of the file to read (arg 1)
shift                                    # Erase arg 1.

for pat; do                              # Process all the other line arguments.
    printf '%s ' "$pat"                  # Print the patern used.
    grep -o "$pat" "$dnafile" | wc -l    # Find the count of matches.
done                                     # done.

Вызовите скрипт (после того, как сделаете его исполняемымchmod u+x countmatches)вот так:

$./countmatches dnafile ttt aac ccgtttg ag
ttt 1
aac 3
ccgtttg 1
ag 0
3
28.01.2020, 05:06

Для неперекрывающихся -баз в строках в файле типа

aaccgtttgtaaccggaac 
acacaca

, попробуйте

awk '{print gsub (base, "&")}' base="ttt" file
1
0

Для перекрытия попробуйте

awk '{while (0 < T=index ($0, base)) {CNT++; $0 = substr($0, T+1)}; print CNT+0;  T = CNT = 0}' base="aca" file
0
3

Если вам нужно количество файлов вместо строк, просуммируйте CNTи распечатайте в разделе END.

0
28.01.2020, 05:06

Теги

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