我正在使用下面给出的命令将我的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终端上无效。
答案 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
开头的不匹配(--
)行(尽管这种模式有时可以解释为命令行选项,需要一些奇怪的转义,例如"[-][-]"
,这就是为什么我将^
放在这里)的原因。