如何使用awk在某些模式之后打印第N条记录的一部分

How top print part of the Nth record after some pattern using awk

我是一个新的 awk 用户,所以有很多事情我现在不知道如何做。我需要打印遵循特定模式的行的一部分。例如,我将此数据作为文件的一部分 星星中的q数=1

 List of q in the star:
      1   0.000000000   0.000000000   0.000000000

      Dielectric constant in cartesian axis

      (      12.793033167       0.000000000       0.000000000 )
      (       0.000000000      12.793033167       0.000000000 )
      (       0.000000000       0.000000000      12.793033167 )

我只需要提取数字 12.793033167,我的模式是 "List of q in the star"。

我找到了如何在模式后提取整行的解决方案:

awk 'c&&!--c;/pattern/{c=N}' file

但是我不明白如何以仅打印第二列的方式更新它(就像打印 $2)。

谁能提供一个好的解决方案?如果能详细解释一下它的整体工作原理也很好。

你快到了

$ awk 'c&&!--c{print } /List of q/{c=5}' file

12.793033167

</code>是第二个字段。</p> <p><code>c&&!--c是一个智能计数器,模式匹配后代入值c=5将开始递减计数(c的初始值为零)。

5 && !4 -> false
4 && !3 -> false
3 && !2 -> false
2 && !1 -> false
1 && !0 -> true

条件为真时触发动作,c的退出值为0。

您还需要知道对于 false && b b 未被评估(短路规则)。 --c 预减值。 Ed Morton 有一个 post 以及更多 smart counters

的例子