我有一个不断写入/更新的文件.我想找到包含特定单词的最后一行,然后打印该行的最后一列.
该文件看起来像这样.随着时间的推移,将附加更多的A1/B1/C1线.
A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434
Run Code Online (Sandbox Code Playgroud)
我试着用
tail -f file | grep A1 | awk '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
打印值766,但没有输出.
有没有办法做到这一点?
Ola*_*che 172
你没有看到任何东西,因为缓冲.当有足够的行或文件结束时,显示输出.tail -f意味着等待更多输入,但没有更多的行file,因此管道grep永远不会关闭.
如果省略-f从tail输出会立即显示:
tail file | grep A1 | awk '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
@EdMorton当然是对的.awk也可以搜索A1,这会缩短命令行
tail file | awk '/A1/ {print $NF}'
Run Code Online (Sandbox Code Playgroud)
或没有尾巴,显示包含所有行的最后一列 A1
awk '/A1/ {print $NF}' file
Run Code Online (Sandbox Code Playgroud)
感谢@ MitchellTracy的评论,tail可能会错过包含的记录A1,因此根本没有输出.这可以通过切换tail和awk首先搜索文件然后显示最后一行来解决:
awk '/A1/ {print $NF}' file | tail -n1
Run Code Online (Sandbox Code Playgroud)
小智 10
只需要一些管道就可以不用awk就可以做到这一点.
tac file | grep -m1 A1 | rev | cut -d' ' -f1 | rev
Run Code Online (Sandbox Code Playgroud)