有没有一种简单的方法可以删除CSV中的重复字段?

时间:2019-05-14 20:12:48

标签: bash darwin

我有一个包含日期和名称的CSV,我想整理出重复的日期,但是使用bash工具保留所有名称。例如:

输入CSV:

01/01/1960,"Torvalds, Linus"
01/01/1960,"Gates, Bill"
04/20/1960,"Woz, Steve"

输出CSV:

01/01/1960,"Torvalds, Linus"
,"Gates, Bill"
04/20/1960,"Woz, Steve"

我知道我可以使用循环和行号来做到这一点,但是我想知道是否有更好的方法。也许使用sort或uniq?

1 个答案:

答案 0 :(得分:0)

使用sortawk

sort -t',' -k1 input.csv |awk -F, -v OFS=, '($1 in a) {gsub($1,"") } !($1 in a) {a[$1]=$1}1'
01/01/1960,"Gates, Baleee"
,"Gates, Benny"
,"Gates, Bill"
,"Torvalds, Linus"
04/20/1960,"Wozniac, pitor"
,"Woz, Steve"

当input.csv如下时:

 -->cat input.csv
01/01/1960,"Torvalds, Linus"
01/01/1960,"Gates, Bill"
01/01/1960,"Gates, Benny"
04/20/1960,"Woz, Steve"
01/01/1960,"Gates, Baleee"
04/20/1960,"Wozniac, pitor"

说明:此处,FS设置为逗号,并且对于每一行,第一列存储在名为a的数组中(如果尚不存在,并且如果已经存在,则将第一列替换为空白)使用gsub函数。 sort用于依次显示日期。