Удалить повторяющиеся строки заголовка CSV в BASH - PullRequest
0 голосов
/ 12 ноября 2019

Я объединил 11 файлов CSV в один файл = test.csv

Файл test.csv выглядит следующим образом:

EMAIL_MD5_HASH_
12345
45678
56789
65478
EMAIL_MD5_HASH_
65738
64738
92827
35658
EMAIL_MD5_HASH_
08978
34546
98765
89076
EMAIL_MD5_HASH_
09875
12564
09876

Как удалить повторяющиеся заголовки, используя BASH в Mac? Я хочу, чтобы мой файл o / p был, test.csv

EMAIL_MD5_HASH_
12345
45678
56789
65478
65738
64738
92827
35658
08978
34546
98765
89076
09875
09874

Файл имеет 8,3 ММ записей. Excel не нравится, иначе я бы нашел и заменил. Все, что я хочу удалить, это повторяющиеся значения заголовков

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Учитывая, что ваш Input_file может иметь строки помимо заголовков, в этом случае вы можете попробовать следующее.

awk 'FNR==1{val=$0;print} val!=$0' Input_file
1 голос
/ 12 ноября 2019

Самый простой способ - напечатать первую строку (ваш начальный заголовок), а затем распечатать каждую оставшуюся строку, которая начинается с числа, используя awk, например,

awk 'FNR == 1; FNR > 1 && /^[0-9]/' file

Где

  • FNR == 1 использует операцию печати по умолчанию для вывода первой строки;
  • FNR > 1 && /^[0-9]/ для всех номеров записей файлов (строк) больше единицы и начинается с цифры,вывод с использованием операции печати по умолчанию.

Пример использования / вывода

С вашим примером в file вы получите:

$ awk 'FNR == 1; FNR > 1 && /^[0-9]/' file
EMAIL_MD5_HASH_
12345
45678
56789
65478
65738
64738
92827
35658
08978
34546
98765
89076
09875
12564
09876

Дайте мне знать, если вы этого хотели. Пока это простой текстовый файл с '\n' окончаниями строк, awk должен обрабатывать 8,3 млн. Записей всего за секунду.

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