这是多次问的,但我仍然无法解决。我的文件的一部分看起来像:
GKKRBSF:: ewrat= 0.00000 (<1 searchk, >1 searche)
dirat= 0.00000 (Direct Summation ratio)
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.10000D+00
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.10000D+00
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.10000D+01
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.10000D+01
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.10000D+00
这在文件之间的某个位置。我必须获得nhat,betah
的第一和n-th的$ 5(例如,在此特定示例中的第三次)匹配。对于第一行,我可以轻松地做:
var_M=`awk '/nhat,betah=/{print $5;exit}' filename`
但是,我该如何获得第三行并退出?我从这个线程中尝试了:
var_M=`awk '/nhat,betah=/{j++}j=3{print $5;exit}' filename`
这给出了文件的第三行的第5列,而无需匹配模式。我当然缺少一些东西。有帮助吗?
您可以跟踪它出现的次数:
$ awk '/nhat,betah=/{i++; if (i==3) {print $5; exit}}' file
0.30000D+01
解释
您几乎拥有它,这只是以适当的方式将条件放入内部的问题:
来自
var_M=$(awk '/nhat,betah=/{j++} j=3{print $5;exit}' filename)
^
to
var_M=$(awk '/nhat,betah=/{j++} j==3{print $5;exit}' filename)
^^
注意,我将最后一列更改为 0.NumberOfLine
,以使其更清楚其输出哪一行:
GKKRBSF:: ewrat= 0.00000 (<1 searchk, >1 searche)
dirat= 0.00000 (Direct Summation ratio)
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.10000D+00
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.20000D+00
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.30000D+01
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.40000D+01
nhat,betah= 0.1000D+01 0.0000D+00 0.1000D+01 0.50000D+00