使用grep

时间:2018-05-31 15:58:42

标签: bash macos terminal grep bioinformatics

我正在使用下面给出的命令将我的fastq文件拆分为两个单独的配对结束读取文件:

grep '@.*/1' -A 3 24538_7#2.fq >24538_7#2_1.fq
grep '@.*/2' -A 3 24538_7#2.fq >24538_7#2_2.fq

但它会在条目之间自动引入--行分隔符。因此,使我的fastq文件不适合进一步处理(因为它然后变成无效的fastq格式)。 所以,我想摆脱行分隔符(--)。 PS:我找到了Linux机器的答案,但我使用的是MacOS,而那些在Mac终端上无效。

2 个答案:

答案 0 :(得分:1)

您可以使用--no-group-separator选项来禁止它(在GNU grep中)。

或者,您可以使用(GNU)sed:

sed '\|@.*/1|,+3!d'

删除除匹配@.*/1和接下来的三行之外的所有行。

对于macOS sed,您可以使用

sed -n '\|@.*/1|{N;N;N;p;}'

但是对于更多的上下文行,这会很快变得笨拙。

答案 1 :(得分:0)

另一种方法是将grep与自身链接:

grep '@.*/1' -A 3 file.fq | grep -v "^--"

第二个grep选择以-v开头的不匹配(--)行(尽管这种模式有时可以解释为命令行选项,需要一些奇怪的转义,例如"[-][-]" ,这就是为什么我将^放在这里)的原因。