Команда comm

Команда 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