我是一个新的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,我的模式是“明星中的q列表”。
我找到了如何在模式之后提取整行的解决方案:
awk 'c&&!--c;/pattern/{c=N}' file
但是我不明白如何以仅打印第二列的方式更新它(与打印$ 2一样)。
有人能提供一个好的解决方案吗?另外,如果能够详细解释它的整体运作方式,那将会很高兴。
答案 0 :(得分:2)
你几乎就在那里
$ awk 'c&&!--c{print $2} /List of q/{c=5}' file
12.793033167
$2
是第二个字段。
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
预先递减值。埃德莫顿有一篇文章,其中有更多smart counters