awk-图案之间的打印-第一行之后的两行

awk-图案之间的打印-第一行之后的两行,awk,pattern-matching,Awk,Pattern Matching,我有一个这样的文件 y z pattern1 line 1 1 1 patern2 x k 我想做的是在两种模式之间打印内容,并有以下限制 避免打印图案 跳过第一个图案后的下一行 这意味着我的输出文件应该如下所示 1 1 1 到目前为止,我能够在模式之间打印,通过使用 awk '/pattern1/{flag=1;next}/pattern2/{flag=0}flag' file 你知道怎么做吗?试试这个: awk '/pattern1/{i=1;next}/patern2/{i=0}{i

我有一个这样的文件

y
z
pattern1
line
1
1
1
patern2
x
k
我想做的是在两种模式之间打印内容,并有以下限制

  • 避免打印图案
  • 跳过第一个图案后的下一行
  • 这意味着我的输出文件应该如下所示

    1
    1
    1
    
    到目前为止,我能够在模式之间打印,通过使用

    awk '/pattern1/{flag=1;next}/pattern2/{flag=0}flag' file
    
    你知道怎么做吗?

    试试这个:

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

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

    当pattern1匹配时,可以记录起始行号:

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

    如果没有与
    模式1和模式2匹配的行,则可以保存
    下一个
    ,当模式1匹配时,您可以记录起始行号:

    awk '/pattern1/{s=NR+1;p=1;next}/pattern2/{p=0}p&&NR>s' file
    
    $ awk '/pattern1/,/patern2/{i++} /patern2/{i=0} i>2' file
    1
    1
    1
    
    如果没有与
    pattern1和pattern2匹配的行,则可以保存
    next

    $ awk '/pattern1/,/patern2/{i++} /patern2/{i=0} i>2' file
    1
    1
    1
    
    模式之间
    增量
    i
    ,在
    2
    记录之后开始打印(
    i>2
    ),并在结束标记处重置
    i


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

    请参见此处(新打印):@JamesBrown:实际上我从那里得到了,但我似乎无法根据我的需要修改它……如果你同意管道输出,你可以使用不同的方法,比如
    awk'NR>1'
    sed'1d'
    tail-n+2
    等等,请看这里(最新版本):@JamesBrown:实际上我是从那里得到的,但我似乎无法根据我的需要修改它……如果你同意使用管道输出,你可以使用不同的方法,比如
    awk'NR>1'
    sed'1d'
    tail-n+2