


comm сравнивает два отсортированных файла построчно. Это удобно для списков идентификаторов, когда нужно найти пересечение или разницу. В практикуме Mentoring.digital считаем каждую строку отдельным элементом множества и заранее убираем повторы.
Пусть в old.txt находятся строки alpha и beta, а в new.txt находятся alpha и gamma. Подготовим отдельные отсортированные файлы, сохранив исходные.
LC_ALL=C sort -u old.txt > old.sorted
LC_ALL=C sort -u new.txt > new.sortedsort -u сортирует строки и оставляет по одному экземпляру каждой. Это подходит для поставленной задачи сравнения множеств. Если количество повторов несёт смысл, такое удаление дублей приведёт к потере информации и требует другого решения.
Одинаковое LC_ALL=C задаём и при подготовке, и при сравнении. Правила сортировки comm зависят от локали. Файлы, упорядоченные по разным правилам, нельзя считать корректно подготовленной парой.
LC_ALL=C comm -12 old.sorted new.sorted
# alpha
LC_ALL=C comm -23 old.sorted new.sorted
# beta
LC_ALL=C comm -13 old.sorted new.sorted
# gammaПо умолчанию вывод состоит из трёх колонок: только первый файл, только второй и строки, присутствующие в обоих. Цифра в параметре подавляет соответствующую колонку.
Поэтому -12 оставляет общие строки, -23 оставляет строки только первого файла, а -13 оставляет строки только второго. Такой способ чтения параметров помогает избежать перестановки смысла «старые» и «новые».
LC_ALL=C comm --check-order -12 old.sorted new.sortedGNU comm с --check-order проверяет порядок входных данных. Нарушение сортировки следует исправить при подготовке файлов. Отключение проверки не делает неотсортированные файлы пригодными для сравнения.
При корректной обработке команда может завершиться успешно и при наличии различий. Код завершения 0 сам по себе не означает, что файлы одинаковы. Для сравнения важно содержимое нужной части вывода.
Добавьте пустой файл и повтор одной строки. Проверьте, как подготовка с sort -u меняет задачу. Затем добавьте строки с разным регистром и объясните, должны ли они считаться одним элементом по требованиям.
Работу с текстовыми утилитами можно включить в практическое обучение DevOps. Подготовку и проверку файлов разберите с ментором по DevOps.