按列消除部分重复的行并保留最后一行

Dag*_*ang 24 bash awk text-processing sed

我有一个看起来像这样的文件:

2011-03-21 name001 line1
2011-03-21 name002 line2
2011-03-21 name003 line3
2011-03-22 name002 line4
2011-03-22 name001 line5
Run Code Online (Sandbox Code Playgroud)

对于每个名字,我只想要它的最后一次出现.所以,我希望结果如下:

2011-03-21 name003 line3
2011-03-22 name002 line4
2011-03-22 name001 line5
Run Code Online (Sandbox Code Playgroud)

有人可以用bash/awk/sed给我一个解决方案吗?

Pau*_*ulP 38

此代码通过第二个字段获取uniq行,但是从文件或文本的末尾(如结果示例中)

tac temp.txt | sort -k2,2 -r -u
Run Code Online (Sandbox Code Playgroud)


pep*_*uan 11

awk '{a[$2]=$0} END {for (i in a) print a[i]}' file
Run Code Online (Sandbox Code Playgroud)

如果出现顺序很重要:


nkv*_*nkv 6

sort < bar > foo
uniq  < foo > bar
Run Code Online (Sandbox Code Playgroud)

bar现在没有重复的行