【问题标题】:awk - print between patterns - two lines after the firstawk - 在模式之间打印 - 第一行之后的两行
【发布时间】:2016-08-17 19:53:39
【问题描述】:

我有一个类似的文件

y
z
pattern1
line
1
1
1
patern2
x
k

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

  1. 避免打印图案
  2. 跳过第一个模式后的下一行

这意味着我的输出文件应该是这样的

1
1
1

到目前为止,我可以在模式之间打印,通过使用忽略它们

awk '/pattern1/{flag=1;next}/pattern2/{flag=0}flag' file

你知道怎么做吗?

【问题讨论】:

  • @JamesBrown :实际上我是从那里得到的,但我似乎无法根据我的需要修改它......
  • 如果您可以通过管道输出,您可以使用不同的方式,例如 awk 'NR>1'sed '1d'tail -n +2

标签: awk pattern-matching


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:
    $ awk '/pattern1/,/patern2/{i++} /patern2/{i=0} i>2' file
    1
    1
    1
    

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

    【讨论】:

      【解决方案3】:

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

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

      如果没有行匹配pattern1 and pattern2,则可以保存next

      【讨论】:

        猜你喜欢
        • 2015-05-07
        • 1970-01-01
        • 2016-01-04
        • 2022-09-23
        • 2015-04-14
        • 2014-04-12
        • 2013-03-12
        • 1970-01-01
        • 2022-01-16
        相关资源
        最近更新 更多