我有一个像下面这样的文件,我想打印两个给定模式PAT1和PAT2之间的行 .
1
2
PAT1
3
4
PAT2
5
6
PAT2
7
PAT2
8
9
PAT2
10
这里PAT1出现一次,但PAT2出现多次 . 我想在PAT1和PAT2的第3次出现之间打印线
我使用下面的命令来打印在这种情况下不起作用的模式
awk '/PAT1/PAT2/'
我期待以下输出
PAT1
3
4
PAT2
5
6
PAT2
7
PAT2
我怎样才能做到这一点?
4 回答
显然这有用:
请参阅有关其工作原理的评论 .
我想这就是你想要的 .
这将等到它找到PAT1,然后打印直到找到PAT2 3次并退出文件 . 这将从输出中排除PAT *,您可以通过删除“下一个”语句来包含它们,这使得awk跳转到下一行 .
以下
awk
可能会有所帮助 . 在这个解决方案中,您可以给出要打印行的出现次数,所以在这种情况下我给出了值-v occur=3
您可以根据需要将其更改为 .或者(如果你想在第三次出现PAT2之前打印东西)除了PAT2字符串,然后运行以下 .
用sed