我有一个返回几行输出的脚本,我正在尝试打印最后一行的最后两个单词(不管输出中的行数)
$ ./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
如何使用awk
或sed
打印最后两个单词“已通过”?
答案 0 :(得分:3)
请说:
awk 'END {print $(NF-1), $NF}'
“普通”awk
存储最后一行(but not all of them!),以便在您到达END
区块时仍然可以访问它。
然后,这是打印倒数第二个和最后一个的问题。这可以使用NF-1
和NF
技巧完成。
答案 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
这会删除文件中的所有行,但在最后一行,它会用最后两个单词替换所有单词,如果成功则打印出来。