保留最后一次出现的字段数据,并删除csv文件中其他出现的相同字段数据



我有一个未排序的csv文件,它总共包含6个字段。字段1中有重复项。需要保留最后一次出现的field1,并删除相同field1值的其他重复记录。我试过awk-F',''!seed[$1]++'-但这会保留第一次出现并删除其他出现。

有人能帮我做其他选择吗?

示例数据:

17710813,24759,
17722388,47281,,,,
17722388,1999084,0246,car,28-Jul-11,
17722388,1159769,11301,earn,16-Jun-16,
17722388,136787,35451,dress,,15-Jun-16
17732315,242393,,light,28-Aug-05,21-Jul-08

预期输出

17710813,24759,
17722388,136787,35451,dress,,15-Jun-16
17732315,242393,,light,28-Aug-05,21-Jul-08

对于您显示的示例,请尝试以下awk代码,这将处理$1在输出中出现的顺序。

awk -F',' '
!arr1[$1]++{
arr2[++count]=$1
}
{
arr3[$1]=$0
}
END{
for(i=1;i<=count;i++){
print arr3[arr2[i]]
}
}
' Input_file

或者如果根据Input_file的$1序列对您来说无关紧要,那么请尝试以下代码。

awk -F',' '{arr[$1]=$0} END{for(i in arr){print arr[i]}}' Input_file

由于您已经标记了您的问题unix,我认为除了awk之外的命令是允许的,因此您可以如下使用tac,让file.txt的内容是

17710813,24759,
17722388,47281,,,,
17722388,1999084,0246,car,28-Jul-11,
17722388,1159769,11301,earn,16-Jun-16,
17722388,136787,35451,dress,,15-Jun-16
17732315,242393,,light,28-Aug-05,21-Jul-08

然后

tac file.txt | awk -F',' '!seen[$1]++' | tac

给出输出

17710813,24759,
17722388,136787,35451,dress,,15-Jun-16
17732315,242393,,light,28-Aug-05,21-Jul-08

说明:tac

在反向中连接和打印文件

因此,文件的最后一行将显示为第一行,依此类推。根据GNUAWK,它将读取tac file.txt中列出的文件,如果没有给定任何文件,则使用标准输入,如上面代码的最后部分所示。awk部分是从你的问题中逐字复制的。

(在gawk 4.2.1中测试(

最新更新