抓住一个模式下面的六行

时间:2012-01-27 22:27:24

标签: awk text-extraction

我有这些行重复

                               FINAL RESULTS



    NSTEP       ENERGY          RMS            GMAX         NAME    NUMBER
    1000      -4.7910E+01     2.1328E-01     9.4193E-01     C          62

最终结果表明一组的平均值。输出文件组合了所有1000组。我需要获取低于能量的数字(-4.7910E + 01),其中所有1000个都在另一个文件中。我需要将最终结果设置为模式,因为其他模式(如NSTEP,ENERGY,RMS ....)将重复数百万次。

我会感激任何帮助。

4 个答案:

答案 0 :(得分:6)

这样的事情对你有用:

awk '/FINAL RESULTS/{for (i=0; i<5; i++) getline; print $2}' <filename>

答案 1 :(得分:3)

好的,我想我现在看到了。

awk 'found==1 { print $2; found=0 } $2=="ENERGY" { found=1 }' inputfile

无论它与ENERGY之间有多少行,这都会得到FINAL RESULTS以下的数字。

答案 2 :(得分:0)

这可能对您有用:

awk '/FINAL RESULTS/{f=1;p=0}{p++}f==1 && p==6{print $2}' file

或者如果您愿意:

awk 'f==2 && p==1{print $2}{p++}/FINAL RESULTS/{f=1}/ENERGY/ && f==1{f=2;p=0}' file

答案 3 :(得分:0)

使用GNU grep(以及其他一些扩展后的内容),您可以执行grep -A 6 'FINAL RESULTS'

之类的操作

所以这应该适用于Linux,我发现它适用于最近的MacOS X,我很确定我已经在FreeBSD上使用它了。所以它可能适用于您将遇到的大多数UNIX形式。 (如果没有,请安装GNU“coreutils”软件包)。