顶级进程而不读下一行

时间:2017-04-08 18:08:08

标签: awk

有没有办法再次开始顶级处理? next执行此操作但它也从输入中读取一行。我想这样做没有读另一行。

我的用例是当我看到行匹配pattern1时,我想停止处理,直到看到匹配pattern2的行。如果有ungetline我会做的

/pattern1/ {
   getline;
   while (! /pattern2/ ) { getline; }
   ungetline; }

我可能会陷入程序性方法

1 个答案:

答案 0 :(得分:1)

要解决你描述的情况,我会使用以下方法:

BEGIN { skip = 0 }

/pattern1/ { skip = 1 ; next }

skip && /pattern2/ { skip = 0 }

!skip && /text/ {
  print "Found text which is not between pattern1 and pattern2"
  next
}

!skip {
  print $0
}

!skip仅在skip为0时启用最后两条规则。

但这也应该有效:

BEGIN { skip = 0 }

/pattern1/ { skip = 1 ; next }

skip && /pattern2/ { skip = 0 }

skip { next }

/text/ {
  print "Found text which is not between pattern1 and pattern2"
  next
}

{ # else...
  print $0
}

注意:

    在上面的示例中处理了
  1. pattern2。 (如果不需要,请将next放入其操作中。)

  2. BEGIN规则实际上不是必需的,但在某种程度上很好地记录了skip变量的特殊含义。