小编典典

打印文件中一行的最后一列

all

我有一个不断被写入/更新的文件。我想找到包含特定单词的最后一行,然后打印该行的最后一列。

该文件看起来像这样。随着时间的推移,更多的 A1/B1/C1 行将附加到它上面。

A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434

我试着用

tail -f file | grep A1 | awk '{print $NF}'

打印值 766,但没有输出。

有没有办法做到这一点?


阅读 166

收藏
2022-08-02

共1个答案

小编典典

由于缓冲,您什么都看不到。当有足够的行数或到达文件末尾时,将显示输出。tail -f意味着等待更多的输入,但没有更多的线路,file因此管道grep永远不会关闭。

如果您-ftail输出中省略,则立即显示:

tail file | grep A1 | awk '{print $NF}'

@EdMorton
当然是对的。awk也可以搜索A1,这将命令行缩短为

tail file | awk '/A1/ {print $NF}'

或不带尾,显示所有包含的行的最后一列A1

awk '/A1/ {print $NF}' file

感谢@MitchellTracy 的评论,tail可能会错过包含的记录A1,因此您根本没有得到任何输出。这可以通过切换tailand来解决awk,首先搜索文件,然后才显示最后一行:

awk '/A1/ {print $NF}' file | tail -n1
2022-08-02