使用 awk 或 sed 从模式出现(远程重复行)中选择性提取

使用 awk 或 sed 从模式出现(远程重复行)中选择性提取

文件具有行模式,其中不包含数字的行在文件中出现两次。

Energy initial, next-to-last, final = 
 -87057.8200168321  -87208.7223900015  -87208.7197287879
Energy initial, next-to-last, final = 
 -87208.7197287879  -87208.7223900015  -87310.7197287879

我想提取值-87310.7197287879,该值是第二次出现不包含数字的行之后的行末尾的值。

我如何使用 awk 或 Sed 来做到这一点?

答案1

awk '/^Energy initial, next-to-last, final =/ 
    { if (secondline==0) { secondline=1; next; } else { getline; print $3; } }' inputfile

-87310.7197287879

答案2

如果您的文件中出现一次或多次此类模式的情况,另一种方法是:

$ awk '/^Energy initial, next-to-last, final =/ {a[NR]=1} 
       {if(NR >= 3 && a[NR-2] == a[NR] && a[NR] == 1) {toprint=1; next}}
       {if (toprint) {print $3; toprint=0}}' infile

不管怎样,豪克的解决方案远没有那么难看。

答案3

只是一个快速:

> awk '{print $3}' /tmp/test.txt | grep -m1 -vE '[a-z]'
-87208.7197287879

awk命令打印第三项 ( $3)/tmp/test.txt并执行以下grep操作不是匹配任何[a-z]删除带有文本的行的字母 ( ) 并在 1 个选定行 ( -m1)之后停止

相关内容