计算不包含特定单词的特定行数。

问题描述 投票:0回答:1

我有个问题。我有一个文件是这样的

@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'开头的行数;我希望我说的足够清楚。如果你需要更多的说明,请告诉我。

grep bioinformatics biopython
1个回答
0
投票

使用 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'

$. 包含当前行号。% 是modulo运算符。

但是一旦我们运行了 Perl,我们就不再需要 grep 了。

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

-l 就可以从输入中删除换行符,并将其添加到输出中。

© www.soinside.com 2019 - 2024. All rights reserved.