我有一个不断被写入/更新的文件。我想找到包含特定单词的最后一行,然后打印该行的最后一列。
该文件看起来像这样。随着时间的推移,更多的 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,但没有输出。
有没有办法做到这一点?
由于缓冲,您什么都看不到。当有足够的行数或到达文件末尾时,将显示输出。tail -f意味着等待更多的输入,但没有更多的线路,file因此管道grep永远不会关闭。
tail -f
file
grep
如果您-f从tail输出中省略,则立即显示:
-f
tail
tail file | grep A1 | awk '{print $NF}'
@EdMorton 当然是对的。awk也可以搜索A1,这将命令行缩短为
A1
tail file | awk '/A1/ {print $NF}'
或不带尾,显示所有包含的行的最后一列A1
awk '/A1/ {print $NF}' file
感谢@MitchellTracy 的评论,tail可能会错过包含的记录A1,因此您根本没有得到任何输出。这可以通过切换tailand来解决awk,首先搜索文件,然后才显示最后一行:
awk
awk '/A1/ {print $NF}' file | tail -n1