使用 grep 时如何去掉“--”行分隔符
How do I get rid of “--” line separator when using grep
我正在使用下面给出的命令将我的 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 终端上不起作用。
您可以使用 --no-group-separator
选项来抑制它(在 GNU grep 中)。
或者,您可以使用 (GNU) sed:
sed '\|@.*/1|,+3!d'
删除除匹配 @.*/1
的行和接下来的三行之外的所有行。
对于 macOS sed,您可以使用
sed -n '\|@.*/1|{N;N;N;p;}'
但是对于更多的上下文行来说,这很快就会变得笨拙。
另一种方法是将 grep 自身链接起来:
grep '@.*/1' -A 3 file.fq | grep -v "^--"
第二个 grep 选择以 --
开头的非匹配 (-v
) 行(尽管这种模式有时可以解释为命令行选项,需要一些奇怪的转义,例如 "[-][-]"
,这就是为什么我把 ^
放在那里的原因)。
我正在使用下面给出的命令将我的 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 终端上不起作用。
您可以使用 --no-group-separator
选项来抑制它(在 GNU grep 中)。
或者,您可以使用 (GNU) sed:
sed '\|@.*/1|,+3!d'
删除除匹配 @.*/1
的行和接下来的三行之外的所有行。
对于 macOS sed,您可以使用
sed -n '\|@.*/1|{N;N;N;p;}'
但是对于更多的上下文行来说,这很快就会变得笨拙。
另一种方法是将 grep 自身链接起来:
grep '@.*/1' -A 3 file.fq | grep -v "^--"
第二个 grep 选择以 --
开头的非匹配 (-v
) 行(尽管这种模式有时可以解释为命令行选项,需要一些奇怪的转义,例如 "[-][-]"
,这就是为什么我把 ^
放在那里的原因)。