我正在从非常大的文件中搜索两种模式,并且不想多次 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
) 的输出。