如何打印与最后一行的第一个字段匹配的所有行

时间:2014-05-19 17:53:19

标签: regex shell command-line awk sed

过去两天我一直试图这样做。我阅读了很多教程,并学到了很多新东西,但到目前为止,我无法实现我想要做的事情。假设这是命令行输出:

Johnny123   US  224
Johnny123   US  145
Johnny123   US  555
Johnny123   US  344
Robert  UK  4322
Robert  UK  52
Lucas   FR  344
Lucas   FR  222
Lucas   FR  8945

我想打印与“最后一行的第一个字段(Lucas)”匹配的行。

所以,我想打印出来:

Lucas   FR  344
Lucas   FR  222
Lucas   FR  8945

注意:

  • 我正在尝试打印的内容每次都有不同的行数,因此我无法执行返回最后3行的操作。
  • 第一个字段没有可用于打印的特定图案。

3 个答案:

答案 0 :(得分:6)

以下是使用tacawk的另一种方式:

tac file | awk 'NR==1{last=$1}$1==last' | tac
Lucas   FR  344
Lucas   FR  222
Lucas   FR  8945

只有在订单很重要时才需要最后tac

答案 1 :(得分:3)

awk 'NR==FNR{key=$1;next} $1==key' file file

或者如果您愿意

awk '{val[$1]=val[$1] $0 RS; key=$1} END{printf "%s", val[key]}' file

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed -nr 'H;g;/^(\S+\s).*\n\1[^\n]*$/!{s/.*\n//;h};$p' file

在保留空间中存储具有重复键的行。更改密钥时删除上一行。在文件末尾打印剩下的内容。