如何使用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
的例子
我是一个新的 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