строка grep и сумма значений верхней подстроки - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть file.fasta, подобный этому:

>NODE_1_length_4203_cov_583903
CCCCCAGTAATTGTGCTGCGCGGCGATGCTAACAAGTTAAAATGCTATCGCTGAGCTAAG
AAAAAGCATGGAAGCTTGGTAAAGTACTACAGTACTACGTGAATGTACCATCAGATTGTG
TTTGTTAGTCGCGCTTTTTTTTTTTTGGAATTTTTTGGAATTTTTTTTGCGCTAACAACC
TCCTGCCGTTTTGCCCGTGCATATCGGTCACGAACAAATCTGATTACTAAACACAGTAGC
CACGGGTGGTAAGAGCAGC
.
.
.
>NODE_2_length_1959_cov_102497
ATATAAAAAAAAAAGGAACTCCAAAATGCAAAAAATGTACAAATCTAGAACTCAAAATCA
TGAATTAACAAAAAAAAAAGCCCAAAAGAAAAGCATCACTTGGAATGCAAGAATTTCATC
ATGGAACATAAAAATATAATGAAAATATAACAATCATGGAAGGCAACTGTCATCAAATAA
CAAATCTGAAAAAAATCTCAATGCATCAAGAAAAAACAGAAGCGGTAAAAGCCGTTGACC
TTCTTTGCCTAATGAAATAGAAACAATGCAGAAGTACATCCTGTACCTACTGACACTTAG
ATGTTGATGCTCCTGTTGTTACACGGGTGGTAAGAGCAGCTCTGGACTCGGCGCGCCGTT
TTGGAGGTTGGGTGGATCCTAGTCCACCTGGAAAAATGGCCACACAAAGGGTGTCTAGAA
.
.
.

Я хочу найти все вхождения для конкретной строки (например, "CACGGGTGGTAAGAGCAGC"). Я делаю это с помощью grep, например:

grep -E "CACGGGTGGTAAGAGCAGC" file.fasta

тогда я хочу суммировать все значения "cov" для вхождений. поэтому сценарий должен найти вхождения, и для каждого из них нужно подойти к более близкой строке, начинающейся с «>» (или содержащей слово «cov» ... то же самое), и, возможно, распечатать его, чтобы получитьперечислите как:

>NODE_1_length_4203_cov_583903
>NODE_2_length_1959_cov_102497

и затем суммируйте значения cov следующим образом: 583903 + 102497 = 686400

Если вы хотите, он может даже сделать все это в одном решении, например: найтивхождений, затем суммируйте все значения параметра cov (присутствующие в верхней строке относительно каждого вхождения, начинающегося с символа «>») для всех найденных вхождений.

1 Ответ

0 голосов
/ 06 ноября 2019

awk будет хорошим выбором здесь (код ниже GNU awk)

$ awk '/^>/{n=split($0,a,"_")} /CACGGGTGGTAAGAGCAGC/{sum+=a[n]} END{print sum}' file.fasta
686400
  • /^>/{n=split($0,a,"_")} если строка ввода начинается с >, создайте массив aсо значениями, основанными на разбиении входной строки на символ _. Количество элементов сохраняется в переменной n. Массив a будет обновляться для каждой строки, начинающейся с >
  • /CACGGGTGGTAAGAGCAGC/{sum+=a[n]}, если входная строка соответствует требуемому поиску, только тогда добавьте последний элемент массива a в переменную sum (начальное значение по умолчаниюравен 0 в числовом контексте)
  • END{print sum} выводить результаты после окончания входного файла

Также см. https://bioinformatics.stackexchange.com/questions для сайта вопросов и ответов для биоинформации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...