Если вы работаете или являетесь частью команды ETL или команды, в которой задействованы огромные данные, тогда вы могли столкнуться с ситуацией, когда вам нужно сравнить 2 огромных файла данных, чтобы определить, идентичны ли они, или найти несоответствующие записи. У меня был аналогичный сценарий, когда мне нужно было сравнить 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 и т. д. Пожалуйста, не стесняйтесь использовать любую из них и делитесь своими наблюдениями в комментариях.
Ваше здоровье