我有一个包含日期和名称的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?
答案 0 :(得分:0)
使用sort
和awk
:
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
用于依次显示日期。