过去两天我一直试图这样做。我阅读了很多教程,并学到了很多新东西,但到目前为止,我无法实现我想要做的事情。假设这是命令行输出:
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
注意:
答案 0 :(得分:6)
以下是使用tac
和awk
的另一种方式:
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
在保留空间中存储具有重复键的行。更改密钥时删除上一行。在文件末尾打印剩下的内容。