Есть ли простой способ удалить дубликаты полей в CSV? - PullRequest
2 голосов
/ 14 мая 2019

У меня есть 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 голосов
/ 14 мая 2019

Использование 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 используется для приведения дат в последовательности.

...