Подсчет заданных c строк, не содержащих заданного c слова - PullRequest
0 голосов
/ 23 апреля 2020

Пожалуйста, у меня есть вопрос: у меня есть файл, подобный этому

@HWI-ST273:296:C0EFRACXX:2:2101:17125:145325/1
TTAATACACCCAACCAGAAGTTAGCTCCTTCACTTTCAGCTAAATAAAAG
+
8?8A;DDDD;@?++8A?;C;F92+2A@19:1*1?DDDECDE?B4:BDEEI
@BBBB-ST273:296:C0EFRACXX:2:1303:5281:183410/1
TAGCTCCTTCGCTTTCAGCTAAATAAAAGCCCAGTACTTCTTTTTTACCA
+
CCBFFFFFFHHHHJJJJJJJJJIIJJJJJJJJJJJJJJJJJJJIJJJJJI
@HWI-ST273:296:C0EFRACXX:2:1103:16617:140195/1
AAGTTAGCTCCTTCGCTTTCAGCTAAATAAAAGCCCAGTACTTCTTTTTT
+
@C@FF?EDGFDHH@HGHIIGEGIIIIIEDIIGIIIGHHHIIIIIIIIIII
@HWI-ST273:296:C0EFRACXX:2:1207:14316:145263/1
AATACACCCAACCAGAAGTTAGCTCCTTCGCTTTCAGCTAAATAAAAGCC
+
CCCFFFFFHHHHHJJJJJJJIJJJJJJJJJJJJJJJJJJJJJJJJJJJIJ

I

Меня интересует только строка, начинающаяся с '@HWI', но я хочу посчитать все строки, которые не начинаются с '@HWI'. В показанном примере результат будет 1, потому что есть одна строка, которая начинается с'@BBB'.

Чтобы быть более понятным: я просто хочу знать номер первой строки шаблонов (что 4 повторяющихся строки), которые не являются @HWI; Я надеюсь, что я достаточно ясно. Пожалуйста, скажите мне, если вам нужно больше разъяснений

1 Ответ

0 голосов
/ 24 апреля 2020

С помощью GNU sed вы можете использовать его расширенный адрес для печати каждой четвертой строки, а затем использовать grep для подсчета тех, которые не начинаются с @HWI:

sed -n '1~4p' file.fastq | grep -cv '^@HWI'

В противном случае вы можете использовать, например: Perl

perl -ne 'print if 1 == $. % 4' -- file.fastq | grep -cv '^@HWI'

$. содержит текущий номер строки, % - оператор по модулю.

Но как только мы запустим Perl, нам не нужно grep больше:

perl -lne '++$c if 1 == $. % 4; END { print $c }' -- file.fastq

-l удаляет перевод строки из ввода и добавляет их в вывод.

...