我有一个不断被写入/更新文件。 我想找到包含特定单词的最后一行,然后打印该行的最后一列。
该文件看起来是这样的。 更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,但没有什么是输出。
有没有办法做到这一点?
我有一个不断被写入/更新文件。 我想找到包含特定单词的最后一行,然后打印该行的最后一列。
该文件看起来是这样的。 更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
永远不会关闭。
如果省略-f
从tail
的输出会立即显示:
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
,因此你没有输出。 这可以通过切换来解决tail
和awk
,首先通过搜索文件,然后才显示的最后一行:
awk '/A1/ {print $NF}' file | tail -n1
要打印行的最后一列只使用$(NF):
awk '{print $(NF)}'
你可以做到这一点,而不只是用一些管道的awk。
tac file | grep -m1 A1 | rev | cut -d' ' -f1 | rev
使用一种方法awk
:
tail -f file.txt | awk '/A1/ { print $NF }'
你可以做到这一切在awk
:
<file awk '$1 ~ /A1/ {m=$NF} END {print m}'
也许这个作品?
grep A1 file | tail -1 | awk '{print $NF}'
在文件上执行此:
awk 'ORS=NR%3?" ":"\n"' filename
你会得到你在找什么。
ls -l | awk '{print $9}' | tail -n1
awk -F " " '($1=="A1") {print $NF}' FILE | tail -n 1
使用awk
与场分离-F设置为一个空格“”。
使用模式 $1=="A1"
和行动 {print $NF}
这将打印最后一个字段在每一个地方,第一场是“A1”的纪录。 管结果到尾,并使用-n 1
选项,只显示最后一行。
使用Perl
$ cat rayne.txt
A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434
$ perl -lane ' /A1/ and $x=$F[2] ; END { print "$x" } ' rayne.txt
766
$