awk - 模式之间的打印 - 第一个之后的两行

时间:2016-08-17 10:47:23

标签: awk pattern-matching

我有一个看起来像

的文件
y
z
pattern1
line
1
1
1
patern2
x
k

我想要做的是在两种模式之间打印内容,但有以下限制

  1. 避免打印图案
  2. 在第一个模式后跳过下一行
  3. 这意味着我的输出文件应该如下所示

    1
    1
    1
    

    到目前为止,我能够在模式之间进行打印,使用

    忽略它们
    awk '/pattern1/{flag=1;next}/pattern2/{flag=0}flag' file
    

    关于如何做的任何想法?

3 个答案:

答案 0 :(得分:1)

试试这个:

awk '/pattern1/{i=1;next}/patern2/{i=0}{if(i==1){i++;next}}i' File

答案 1 :(得分:1)

$ awk '/pattern1/,/patern2/{i++} /patern2/{i=0} i>2' file
1
1
1

patterns增量i之间,2条记录开始打印(i>2后)并在结束标记处重置i

答案 2 :(得分:0)

您可以在pattern1匹配时记录起始行号:

awk '/pattern1/{s=NR+1;p=1;next}/pattern2/{p=0}p&&NR>s' file

如果next

没有匹配的行,则可以保存pattern1 and pattern2