仅保留文件中最新的行,并且基于两个字段是重复的

时间:2013-04-05 22:18:46

标签: awk

这与问题有关

我有一个这样的文件:

FOO,BAR,100,200,300
BAZ,TAZ,500,600,800
FOO,BAR,900,1000,1000
HERE,THERE,1000,200,100
FOO,BAR,100,10000,200
BAZ,TAZ,100,40,500

重复项由前两个字段决定。此外,更“近期”的记录(文件中较低/较高的行号)是应该保留的记录。

什么是输出的awk脚本:

BAZ,TAZ,100,40,500
FOO,BAR,100,10000,200
HERE,THERE,1000,200,100

输出顺序并不那么重要。

awk语法的解释会很棒。

2 个答案:

答案 0 :(得分:2)

这在中很简单:我们只需要将一个键与第一列和第二列结合使用,其余列为值:

$ awk -F, '{a[$1","$2]=$3","$4","$5}END{for(i in a)print i,a[i]}' OFS=, file.txt
BAZ,TAZ,100,40,500
HERE,THERE,1000,200,100
FOO,BAR,100,10000,200

答案 1 :(得分:1)

这可能适合你(tac和GNU排序):

tac file | sort -sut, -k1,2