如何从一个文件中 grep 两个模式,并根据哪个模式匹配将这些行定向到不同的输出文件?

如何从一个文件中 grep 两个模式,并根据哪个模式匹配将这些行定向到不同的输出文件?

我正在从非常大的文件中搜索两种模式,并且不想多次 grep 。我当前正在运行此命令来查找模式,然后如果找到,则还取匹配行之前的一行和之后的两行,然后使用 sed 删除行分隔符,最后压缩输出:

zgrep -B 1 -A 2 'Pattern_1' In.gz | sed '/^--$/d' | gzip >out.gz

我怎样才能同时查找模式 1 和 2 并将我的行分别打印到 out1.gz 或 out2.gz 。我读这个线程但我不熟悉 awk 所以我不确定它是否适用于我的情况。

谢谢

答案1

你可以做:

zgrep -B1 -A2 'pat_1\|pat_2' In.gz | tee >(grep -B1 -A2 'pat_1' | \
  grep -v '^--$' | gzip >out1.gz) | grep -B1 -A2 'pat_2' | \
    grep -v '^--$' | gzip >pat_2.gz

这里将发送两种方式tee的初始输出:zgrep -B1 -A2 'pat_1\|pat_2' In.gz

  • 进程替换中的命令>()将在一种模式下工作 ( pat_1)

  • 发送到 STDOUT 的输出将被下一个管道捕获grep,并进行处理以获得第二个模式 ( pat_2) 的输出。

相关内容