打印最后一行的最后两个字

print last two words of last line

我有一个 returns 几行输出的脚本,我正在尝试打印最后一行的最后两个单词(无论输出中的行数如何)

$ ./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 打印最后两个词 "is passed"?

直接说:

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

"normal" awk 存储最后一行 (),以便在您到达 END 块时仍然可以访问它。

那么,就是打印倒数第二张和最后一张的事情了。这可以使用 NF-1NF 技巧来完成。

这可能对你有用 (GNU sed):

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

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

如果您的最后一行只能包含 1 个字段并且您的 awk 不保留 END 部分中的字段值,则为了稳健:

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