簡體   English   中英

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

[英]How to print all lines matching the first field of last line

過去兩天我一直在努力做到這一點。 我閱讀了很多教程,並學到了很多新東西,但到目前為止,我無法實現我想要做的事情。 假設這是命令行輸出:

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行的事情。
  • 第一個字段沒有我可以用來打印的特定模式。

這是使用tacawk另一種方式:

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

只有在訂單很重要時才需要最后一個tac

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

這可能適合你(GNU sed):

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

在保留空間中存儲具有重復鍵的行。 更改密鑰時刪除上一行。 在文件末尾打印剩下的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM