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

时间:2015-06-09 20:48:51

标签: bash csv 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,

我想删除重复的条目

我最接近的是以下awk命令

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

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

,Elementary Algebra 38
,2015-05-07 15:30:43
,Sentence Skills 104
,FirstName
,LastName
,1997-05-20
,83494989

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

使用解决方案进行更新:

anubhava的回答非常好,我添加了一个关于删除约会时间的问题,Ed Morton帮忙解决了这个问题,这里是完整的查询

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

2 个答案:

答案 0 :(得分: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,

答案 1 :(得分:0)

实现相同的另一种方式

将逗号更改为新行

sed -e 's/,/\n/g'

使用sort -u

删除重复的行
sed -e 's/,/\n/g' | sort -u

最后将新行换回逗号

sed -e 's/,/\n/g' | sort -u | 's/\n/,/g'