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

tnkciper  于 2024-01-03  发布在  其他
关注(0)|答案(3)|浏览(110)

我有一个这样的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

icnyk63a

icnyk63a1#

你可以使用这个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,

字符串

cgvd09ve

cgvd09ve2#

这对我很有效:

test='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,'

echo $test |tr ',' '\n' | sort -u | grep . | tr '\n' ','

字符串
说明:
1.为了可读性,将变量“test”设置为逗号分隔的字符串。
1.使用tr命令将逗号改为换行符。
1.使用“sort -u”删除重复项.
1.使用“grep”删除多余的空白行。
1.使用tr命令将换行符改回逗号。
这可能不像其他方法那样优雅或快速,但对我来说更容易理解。

bkhjykvo

bkhjykvo3#

另一种方法来实现相同的
将逗号改为新行

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

字符串
使用sort -u删除重复行

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


最后将新行替换回逗号

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

相关问题