按块分离 greps 输出

按块分离 greps 输出

假设我有一个程序,它会提示大量信息。我只对 3 条总是接连出现的消息感兴趣。我现在想 grep 这些行并将它们与符合我的模式的接下来 3 条消息分开。

到目前为止我拥有的是以下命令行:

./myproc | grep -e "pattern1|pattern2|pattern3" | awk '{print $0,"\n"}'

然而这会产生类似这样的结果

line 1

line 2 

line 3

line 1

line 2 

line 3

但我想要的应该是这样的:

line 1
line 2
line 3

line 1
line 2
line 3

答案1

首先,无论如何,当您将输出传递给 awk 时,您不会也不应该使用 grep,因为 awk 知道 grep 所知道的内容,甚至更多。

然后,awk 的打印指令(与 C 中的 printf() 或 perl 中的 print 不同)会自动在值后打印换行符(尽管 awk 也有自己的 printf,但它不会这样做)。

最后一个 bnl,如果您只想打印出整条记录(此处:行),您甚至不必指定它。

现在你应该尝试一下这个:

./myproc | awk '/pattern1/,/pattern3/ {print}; /pattern3/ {print ""}'

你应该阅读范围模式人 awk

相关内容