仅使用尴尬打印第n次匹配

  • 本文关键字:打印 regex bash awk
  • 更新时间 :
  • 英文 :


这是多次问的,但我仍然无法解决。我的文件的一部分看起来像:

 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

相关内容

  • 没有找到相关文章

最新更新