打印行的最后一列在文件

问题描述 投票:91回答:10

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

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

有没有办法做到这一点?

file awk tail
10个回答
163
投票

你没有看到,因为缓冲的东西。输出显示,当有足够多的线或文件结束为止。 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,因此你没有输出。这可以通过切换tailawk,首先通过搜索文件,然后才显示最后一行来解决:

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

-1
投票

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


15
投票

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

awk '{print $(NF)}' 

10
投票

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

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

9
投票

使用awk一种方式:

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

2
投票

也许这个作品?

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

1
投票

你可以做到这一切在awk

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

0
投票

在文件上执行此:

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

你会得到你在找什么。


0
投票

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

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

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


0
投票

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

$
© www.soinside.com 2019 - 2024. All rights reserved.