打印行的最后一列在文件(Printing the last column of a line in

2019-07-02 11:44发布

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

该文件看起来是这样的。 更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,但没有什么是输出。

有没有办法做到这一点?

Answer 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 ,因此你没有输出。 这可以通过切换来解决tailawk ,首先通过搜索文件,然后才显示的最后一行:

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


Answer 2:

要打印行的最后一列只使用$(NF):

awk '{print $(NF)}' 


Answer 3:

你可以做到这一点,而不只是用一些管道的awk。

tac file | grep -m1 A1 | rev | cut -d' ' -f1 | rev


Answer 4:

使用一种方法awk

tail -f file.txt | awk '/A1/ { print $NF }'


Answer 5:

你可以做到这一切在awk

<file awk '$1 ~ /A1/ {m=$NF} END {print m}'


Answer 6:

也许这个作品?

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


Answer 7:

在文件上执行此:

awk 'ORS=NR%3?" ":"\n"' filename

你会得到你在找什么。



Answer 8:

ls -l | awk '{print $9}' | tail -n1



Answer 9:

awk -F " " '($1=="A1") {print $NF}' FILE | tail -n 1

使用awk与场分离-F设置为一个空格“”。

使用模式 $1=="A1"行动 {print $NF}这将打印最后一个字段在每一个地方,第一场是“A1”的纪录。 管结果到尾,并使用-n 1选项,只显示最后一行。



Answer 10:

使用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

$


文章来源: Printing the last column of a line in a file
标签: file awk tail