У меня есть текстовый файл с разделителями табуляции, который нужно проверить на наличие дубликатов. Макет выглядит примерно так. (Первые записи в файле - это имена столбцов.)
Пример входного файла:
+--------+-----------+--------+------------+-------------+----------+
| First | Last | BookID | Title | PublisherID | AuthorID |
+--------+-----------+--------+------------+-------------+----------+
| James | Joyce | 37 | Ulysses | 344 | 1022 |
| Ernest | Hemingway | 733 | Old Man... | 887 | 387 |
| James | Joyce | 872 | Dubliners | 405 | 1022 |
| Name1 | Surname1 | 1 | Title1 | 1 | 1 |
| James | Joyce | 37 | Ulysses | 345 | 1022 |
| Name1 | Surname1 | 1 | Title1 | 2 | 1 |
+--------+-----------+--------+------------+-------------+----------+
Файл может содержать до 500 тыс. Строк. После этого мы проверяем, нет ли дубликатов значений BookID и AuthorID. Так, например, в приведенной выше таблице не может быть двух строк с BookID 37 и AuthorID 1022.
вероятно , но не гарантируется, что автор будет сгруппирован последовательнолиний. Если это не так, и это слишком сложно проверить, я могу с этим смириться. Но в противном случае, если автор тот же, нам нужно знать, есть ли дубликат BookID.
Одна сложность - у нас могут быть дубликаты BookID в файле, но это недопустимая комбинация AuthorID + BookID.
Есть хороший способ проверить это в скрипте bash, может быть, какой-то комбо sed
и awk
или другое средство для достижения этой цели?
Необработанное содержимое файла, разделенное табуляцией, для сценариев:
First Last BookID Title PublisherID AuthorID
James Joyce 37 Ulysses 344 1022
Ernest Hemingway 733 Old Man... 887 387
James Joyce 872 Dubliners 405 1022
Name1 Surname1 1 Title1 1 1
James Joyce 37 Ulysses 345 1022
Name1 Surname1 1 Title1 2 1