打印文件中行的最后一列

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

这个文件看起来像这样。随着时间的推移,会有更多的 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,但是没有输出。

有办法吗?

314728 次浏览

你什么都看不到,因为有缓冲。输出显示,当有足够的行或文件结束达到。tail -f意味着等待更多的输入,但是在 file中没有更多的线路,所以到 grep的管道永远不会关闭。

如果在 tail中省略 -f,输出将立即显示:

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

@ EdMorton 当然是对的。 也可以搜索 A1,这样可以将命令行缩短为

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

或没有尾部,显示包含 A1的所有行的最后一列

awk '/A1/ {print $NF}' file

由于@Mitchell Tracy 的注释,tail可能会错过包含 A1的记录,因此根本不会得到任何输出。这可以通过切换 tailawk来解决,首先在文件中搜索,然后才显示最后一行:

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

也许这个有用?

grep A1 file | tail -1 | 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}'

在文件中执行以下操作:

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

你会得到你想要的。

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

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

awk '{print $(NF)}'

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

在字段分隔符 F设置为空格的情况下使用 awk

使用 模式$1=="A1"开拍{print $NF},这将打印每条记录中第一个字段为“ A1”的最后一个字段。将结果导入 tail 并使用 -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


$

这里不是实际的问题,但可能会帮助一些人: 我正在做 awk "{print $NF}",注意错误的引用。应该是 awk '{print $NF}',这样 shell 就不会展开 $NF