MERGE 2 CSV-файлы, удаляющие дубликаты, используя BASH или Awk - PullRequest
1 голос
/ 02 февраля 2020

У меня есть 2 файла CSV, как указано ниже:

Large_set.csv

0,116070742,34991221138,false,2020-02-02 15:24:30,2020-02-01 03:03:30
0,116070741,34617138590,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070743,34603492144,false,2020-02-02 15:24:31,2020-02-02 15:24:31

Small_set.csv

0,116070777,34991221138,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070422,34617138999,false,2020-02-02 15:24:30,2020-02-02 15:24:30

Требование:

У меня есть 2 CSV-файла разных размеров. Я хочу объединить 2 CSV-файла, сопоставив 3-й столбец (например, 34991221138, как указано здесь) и удалив дубликаты из Large_set.csv.

Ожидаемый результат:

0,116070777,34991221138,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070741,34617138590,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070743,34603492144,false,2020-02-02 15:24:31,2020-02-02 15:24:31
0,116070422,34617138999,false,2020-02-02 15:24:30,2020-02-02 15:24:30

Я пытался использовать cat Large_set.csv Small_set.csv > new_set.csv но я все еще не могу удалить дубликаты из 1-го файла. Также проверил решения, но мое требование - использовать bash script или awk (не python или любой другой инструмент, например csvmerge) из-за некоторых ограничений.

1 Ответ

0 голосов
/ 02 февраля 2020

Если вам не важен порядок вывода, то используйте сортировку GNU для -s:

$ sort -t, -k3,3 -u -s small_set.csv large_set.csv
0,116070743,34603492144,false,2020-02-02 15:24:31,2020-02-02 15:24:31
0,116070741,34617138590,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070422,34617138999,false,2020-02-02 15:24:30,2020-02-02 15:24:30
0,116070777,34991221138,false,2020-02-02 15:24:30,2020-02-02 15:24:30

Если вам не все равно, вам придется сообщить нам, каким должен быть этот порядок вывода, так как не очевидно в вашем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...