如何使用awk删除重复的逗号分隔字符串

moo*_*emu 2 csv bash awk

我有一个像这样的csv文件:(名为test2.csv)

lastname,firstname,83494989,1997-05-20,2015-05-07 15:30:43,Sentence Skills 104,Sentence Skills 104,Elementary Algebra 38,Elementary Algebra 38,Sentence Skills 104,Sentence Skills 104,Elementary Algebra 38,Elementary Algebra 38,
Run Code Online (Sandbox Code Playgroud)

我想删除重复的条目

我最接近的是以下awk命令

awk '{a[$0]++} END {for (i in a) print RS i}' RS="," test2.csv
Run Code Online (Sandbox Code Playgroud)

它可以工作,但会导致新的问题,它会将值排除在外,并将它们放在如下的行中:

,Elementary Algebra 38
,2015-05-07 15:30:43
,Sentence Skills 104
,FirstName
,LastName
,1997-05-20
,83494989
Run Code Online (Sandbox Code Playgroud)

我需要保持他们的订单并将它们保持在一行(我可以解决行问题,但不知道如何解决订单问题)

更新解决方案:

anubhava的答案很有效,我添加了一个关于从日期中删除时间的问题,Ed Morton帮忙解决了这个问题,这里是完整的查询

awk 'BEGIN{RS=ORS=","} {sub(/ ..:..:..$/,"")} !seen[$0]++' test2.csv
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 7

你可以使用这个awk:

awk 'BEGIN{RS=ORS=","} !seen[$0]++' test2.csv
lastname,firstname,83494989,1997-05-20,2015-05-07 15:30:43,Sentence Skills 104,Elementary Algebra 38,
Run Code Online (Sandbox Code Playgroud)

  • @ moore1emu如果你使用awk你不需要/想要sed或grep或其他任何东西,因为awk可以在内部做任何有用的其他工具可以做的事情.你只需要在`!seen`之前想要``sub(/ ..: ..:.. $ /,"")}`之类的东西. (2认同)