有没有一种简单的方法可以删除 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?
使用 sort
和 awk
:
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
用于按顺序排列日期。
我有一个包含日期和姓名的 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?
使用 sort
和 awk
:
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
用于按顺序排列日期。