打印最后一行的最后两个单词

时间:2015-05-06 10:55:35

标签: awk sed cut

我有一个返回几行输出的脚本,我正在尝试打印最后一行的最后两个单词(不管输出中的行数)

$ ./test.sh

service is running..
check are getting done
status is now open..
the test is passed

我尝试按以下方式运行,但它会打印每行的最后一个单词。

$ ./test.sh |  awk '{ print $NF }'

running..
done
open..
passed

如何使用awksed打印最后两个单词“已通过”?

3 个答案:

答案 0 :(得分:3)

请说:

awk 'END {print $(NF-1), $NF}'

“普通”awk存储最后一行(but not all of them!),以便在您到达END区块时仍然可以访问它。

然后,这是打印倒数第二个和最后一个的问题。这可以使用NF-1NF技巧完成。

答案 1 :(得分:1)

如果你的最后一行只能包含1个字段并且你的awk没有在END部分保留字段值,那么为了健壮:

awk '{split($0,a)} END{print (NF>1?a[NF-1]OFS:"") a[NF]}'

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed '$s/.*\(\<..*\<.*\)/\1/p;d' file

这会删除文件中的所有行,但在最后一行,它会用最后两个单词替换所有单词,如果成功则打印出来。