Команда Linux comm

Опубликовано admin - вт, 10/11/2022 - 11:47

В Linux команда comm сравнивает два файла, выводя содержимое в три столбца: несовпадающие строки первого и второго файла, совпадающие — обоих файлов.

Использование команды comm в Linux с примерами

Содержание

Синтаксис

comm [ПАРАМЕТР] ФАЙЛ1 ФАЙЛ2

Опции

-1
Не показывать столбец 1 (строки, уникальные для ФАЙЛА1)
-2
Не показывать столбец 2 (строки, уникальные для ФАЙЛА2)
-3
Не показывать столбец 3 (строки, встреченные в обоих файлах)
  --check-order
Проверить правильность сортировки ввода, даже если все входные строки имеют пару
  --nocheck-orde
Не проверять правильность сортировки ввода
  --output-delimiter=РАЗ
Отделять столбцы с помощью РАЗделителя
  --total
Показывать сводку
-z, --zero-terminated
Разделитель строк NUL, а не символ новой строки

Заметим, что при сравнении действуют правила, задаваемые LC_COLLATE.

Использование команды comm в Linux

Строки в сравниваемых файлах должны быть отсортированы по алфавиту. Для этого можно воспользоваться, например, командой sort:

oleg@mobile:~/Directory:$ sort -o usa-states-ru_1.txt usa-states-ru_1.txt 
oleg@mobile:~/Directory:$

Для проверки того, что входные файлы отсортированы используется опция --check-order:

oleg@mobile:~/Directory:$ comm --check-order usa-states-ru_1.txt usa-states-ru_2.txt

Если один из файлов не отсортирован, то вместо нормального вывода появится сообщение об ошибке. 

Если вы по каким-либо причинам не желаете выполнять сортировку, то для того, чтобы не получать сообщение об ошибке используйте опцию --nocheck-order.

Для примера воспользуемся двумя файлами, в каждом из которых находится отсортированный по алфавиту список 10 штатов США:

oleg@mobile:~/Directory:$ cat usa-states-ru_1.txt 
Айдахо (ID)
Айова (IA)
Алабама (AL)
Аляска (AK)
Аризона (AZ)
Арканзас (AR)
Вайоминг (WY)
Вашингтон (WA)
Вермонт (VT)
Вирджиния (VA)
oleg@mobile:~/Directory:$ 
oleg@mobile:~/Directory:$ cat usa-states-ru_2.txt 
Алабама (AL)
Аляска (AK)
Аризона (AZ)
Арканзас (AR)
Вайоминг (WY)
Вашингтон (WA)
Вермонт (VT)
Вирджиния (VA)
Висконсин (WI)
Гавайи (HI)
oleg@mobile:~/Directory:$ 

Сравнение без параметров

Проводим сравнение двух файлов без использования опций:

oleg@mobile:~/Directory:$ comm usa-states-ru_1.txt usa-states-ru_2.txt 
Айдахо (ID)
Айова (IA)
        Алабама (AL)
        Аляска (AK)
        Аризона (AZ)
        Арканзас (AR)
        Вайоминг (WY)
        Вашингтон (WA)
        Вермонт (VT)
        Вирджиния (VA)
    Висконсин (WI)
    Гавайи (HI)
oleg@mobile:~/Directory:$
Первый столбец
Несовпадающие элементы первого файла
Второй столбец
Несовпадающие элементы второго файла
Третий столбец
Совпадающие элементы обоих файлов

Отображение одного столбца

Для вывода одного столбца необходимо указать номера столбцов, которые не должны отображаться.

Вывод уникальных строк первого файла:

oleg@mobile:~/Directory:$ comm -23 usa-states-ru_1.txt usa-states-ru_2.txt 
Айдахо (ID)
Айова (IA)
oleg@mobile:~/Directory:$ 

Вывод уникальных строк второго файла:

oleg@mobile:~/Directory:$ comm -13 usa-states-ru_1.txt usa-states-ru_2.txt 
Висконсин (WI)
Гавайи (HI)
oleg@mobile:~/Directory:$ 

Заключение

Здесь были приведены лишь основные приёмы работы с командой comm в Linux. Разобрав примеры вы быстро поймёте, что выполнять любые варианты сортировки файлов при их сравнении достаточно просто.

Поделиться с друзьями