Команда comm позволяет использовать одноименную утилиту для сравнения двух текстовых файлов с отсортированными по алфавиту строками. Данной утилите довольно сложно найти достойное применение, тем не менее, о ней стоит знать.
Базовый синтаксис команды выглядит следующим образом:
$ comm [параметры] <файл 1> <файл 2>
Перед использованием текстовых файлов строки в них должны быть отсортированы по алфавиту в соответствии с используемой локалью; для выполнения этой работы вполне подойдет утилита sort. При вызове без параметров рассматриваемая утилита будет выводить строки в трех столбцах: первый столбец будет содержать строки, присутствующие лишь в файле 1, второй столбец — строки, присутствующие лишь в файле 2, а третий столбец — строки, присутствующие в обоих файлах. Утилита поддерживает параметры -1, -2 и -3, позволяющие не выводить столбцы под соответствующими номерами. Статус завершения работы утилиты не зависит от результата распределения строк по столбцам; в случае успешного распределения строк утилита завершает работу с нулевым статусом, в случае возникновения любой ошибки — с ненулевым.
Для демонстрации результата сравнения двух текстовых файлов будут использоваться два файла со следующим содержимым:
$ cat comm1
001
002
003
004
005
$ cat comm2
000
001
003
005
007
Обычное сравнение осуществляется с помощью следующей команды:
$ comm comm1 comm2
000
001
002
003
004
005
007
Для получения списка уникальных строк из файла следует деактивировать вывод строк из другого файла (с помощью параметра -1, если вас интересуют строки из второго файла или -2, если вас интересуют строки из первого файла), а также вывод повторяющихся строк (с помощью параметра -3). Пример для первого файла:
$ comm -23 comm1 comm2
002
004
И для второго файла:
$ comm -13 comm1 comm2
000
007
Для получения списка повторяющихся в двух файлах строк следует деактивровать вывод уникальных строк из первого и второго файлов (с помощью параметров -1 и -2):
$ comm -12 comm1 comm2
001
003
005