打印最后一行的最后两个字
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
如何使用 awk
或 sed
打印最后两个词 "is passed"?
直接说:
awk 'END {print $(NF-1), $NF}'
"normal" awk
存储最后一行 (),以便在您到达 END
块时仍然可以访问它。
那么,就是打印倒数第二张和最后一张的事情了。这可以使用 NF-1
和 NF
技巧来完成。
这可能对你有用 (GNU sed):
sed '$s/.*\(\<..*\<.*\)//p;d' file
这将删除文件中的所有行,但在最后一行,它将所有单词替换为最后两个单词,如果成功则打印它们。
如果您的最后一行只能包含 1 个字段并且您的 awk 不保留 END 部分中的字段值,则为了稳健:
awk '{split([=10=],a)} END{print (NF>1?a[NF-1]OFS:"") a[NF]}'
我有一个 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
如何使用 awk
或 sed
打印最后两个词 "is passed"?
直接说:
awk 'END {print $(NF-1), $NF}'
"normal" awk
存储最后一行 (END
块时仍然可以访问它。
那么,就是打印倒数第二张和最后一张的事情了。这可以使用 NF-1
和 NF
技巧来完成。
这可能对你有用 (GNU sed):
sed '$s/.*\(\<..*\<.*\)//p;d' file
这将删除文件中的所有行,但在最后一行,它将所有单词替换为最后两个单词,如果成功则打印它们。
如果您的最后一行只能包含 1 个字段并且您的 awk 不保留 END 部分中的字段值,则为了稳健:
awk '{split([=10=],a)} END{print (NF>1?a[NF-1]OFS:"") a[NF]}'