文件具有行模式,其中不包含数字的行在文件中出现两次。
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
)之后停止