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

Is there an easy way to remove duplicate fields in a CSV?

我有一个包含日期和姓名的 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?

使用 sortawk :

sort -t',' -k1 input.csv |awk -F, -v OFS=, '( in a) {gsub(,"") } !( in a) {a[]=}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 用于按顺序排列日期。