Если вы работаете или являетесь частью команды ETL или команды, в которой задействованы огромные данные, тогда вы могли столкнуться с ситуацией, когда вам нужно сравнить 2 огромных файла данных, чтобы определить, идентичны ли они, или найти несоответствующие записи. У меня был аналогичный сценарий, когда мне нужно было сравнить 2 огромных файла фиксированной длины.

Далее было наблюдение за файлами.

  1. В обоих файлах миллионы записей, но они перемешаны и не в том же порядке.
  2. В обоих файлах есть столбец, который уникален и не будет совпадать для обоих файлов.

Итак, теперь самое интересное, как этого добиться?

Шаг 1: Замените уникальный столбец стандартным текстом. Поскольку это файл фиксированной длины, я использовал «sed». Измененный/замененный файл будет сохранен как отдельный файл.

sed -r ‘s/^(.{‹‹From Position››}).{‹‹Нет. символов››}/\1‹‹Заменить текст››/’ inputFile.txt › inputREPLACED.txt

‹‹Из позиции››: это позиция, после которой начнется замена. Например: - Если это указано как 10, замена начнется с 11-й позиции.

‹‹Заменить текст››: это текст, который заполнит этот столбец.

Шаг 2: С измененным файлом мы можем отсортировать его построчно, используя команду «Сортировка». Результат хранится в отдельном файле.

сортировать inputREPLACED.txt | уникальный › ./inputREPLACED_SORT.txt

Шаг 3: Теперь оба файла готовы к сравнению, мы можем использовать «diff» для сравнения файлов, а различия можно сохранить в отдельном файле.

diff input1REPLACED_SORT.txt input2REPLACED_SORT.txt › diffOutput.txt

Мы можем найти различия в файле diffOutput.txt.

Вывод:

Есть еще несколько параметров, которые мы можем добавить, чтобы настроить и получить требуемый результат. Подробности о том же можно найти здесь. Кроме того, мы можем использовать другие команды, такие как cmp, comm, dircmp и т. д. Пожалуйста, не стесняйтесь использовать любую из них и делитесь своими наблюдениями в комментариях.

Ваше здоровье