假设我有一个程序,它会提示大量信息。我只对 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。