我有一个未排序的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中测试(