Команда «comm» в Linux с примерами

by itisgood

Описание

Часто бывает полезно сравнить версии текстовых файлов.
Это особенно важно для системных администраторов и разработчиков программного обеспечения.
Системному администратору может потребоваться, например, сравнить существующий файл конфигурации с предыдущей версией для диагностики системной проблемы.
Аналогично, программист часто должен видеть, какие изменения были внесены в программы с течением времени.
Коммутационная утилита отображает линейное сравнение двух отсортированных файлов.
В первом из трех столбцов, которые он отображает, перечислены строки, найденные только в file1, во втором столбце перечислены строки, найденные только в file2, а третий список строк, общих для обоих файлов. Основной синтаксис команды «comm»:
# comm [options] file1 file2

Аргументы

Аргументы file1 и file2 являются именами файлов файлов, которые сравниваются.

Использование дефиса (-) вместо file1 или file2 заставляет comm читать стандартный ввод вместо этого файла.

Опции

Вы можете комбинировать параметры. Без параметров comm производит вывод из трех столбцов.

параметры / функции

  • -1 Не отображает столбец 1 (не отображает строки, найденные только в file1).
  • -2 Не отображает столбец 2 (не отображает строки, найденные только в file2).
  • -3 Не отображает столбец 3 (не отображает строки, найденные в обоих файлах).
  • -i Нечувствительное к регистру сравнение строк.
  • – -check-order Проверьте порядок ввода, даже если все входные строки являются парой
  • – -nocheck-order Игнорировать порядок ввода
  • – -output-delimiter = STR делит столбцы с делителем “STR”
  • – -help Отображает меню справки
  • – -version Отображение информации о версии команд

Примечание. Если файлы не были отсортированы, comm будет работать неправильно. Строкам во втором столбце предшествует один TAB, а в третьем столбце – два TAB. Статус вывода указывает, нормально ли выполнена команда (0) или аномально (не 0).

Примеры использования команды «comm» в Linux

Пример 1: Основное использование

Давайте рассмотрим базовый пример команды «comm» для сравнения 2 отсортированных файлов. Файлы выглядят так:

# cat file1
aa
bb
cc
dd
# cat file2
cc
xx
yy
zz

Команда comm сравнивает файлы по строкам и выводит любые одинаковые строки. Например:

# comm file1 file2
aa
bb
		cc
dd
	xx
	yy
	zz

Этот вывод команды отображается в трех столбцах: столбец 1 показывает строки только в file1 (aa, bb, dd), column2 показывает каждую строку только в file2 (xx, yy, zz), а в столбце 3 показана каждая строка обоих файлов (xx, yy, zz).

Это гораздо более подробное сравнение, чем с diff, и вывод может быть подавляющим, когда все, что вам нужно, – это найти или проверить одно или два простых изменения. Тем не менее, это может быть невероятно полезно, когда вы не очень хорошо знакомы с любым файлом и хотите посмотреть, как они сравниваются.

Пример 2: Подавление столбцов

comm поддерживает опции в форме -n, где n равно либо 1, 2, либо 3.

При использовании эти параметры определяют, какие столбцы (столбцы) подавляются.

Например, если мы хотим выводить только строки, разделяемые обоими файлами, мы будем подавлять вывод столбцов 1 и 2:

# comm -12 file1 file2
cc

Точно так же вы можете отображать только строки, которые присутствуют только в file1 и file2, используя команды ниже.

# comm -23 file1 file2
aa
bb
dd
# comm -13 file1 file2
xx
yy
zz

Пример 3: Проверка сортировки на входе

команда comm предоставляет 2 опции для проверки отсортированных входов:

1. –check-order
2. –nocheck-order

Опция -check-order проверяет правильность сортировки ввода перед сравнением.

Если вход не отсортирован, вы получите ошибку, как показано ниже:

# comm --check-order file1 file2
aa
bb
cc
dd
	xx
comm: file 2 is not in sorted order

В то время как опция -nocheck-order позволяет сравнивать файлы, даже если вход не находится в отсортированном формате. Например:

# cat file1
aa
bb
cc
dd
# cat file2
xx
cc
yy
zz
# comm --nocheck-order file1 file2
aa
bb
		cc
dd
	xx
	yy
	zz

Пример 4: разделительный вывод

comm также предоставляет возможность удаления вывода с использованием предоставленного пользователем разделителя

. Например, вместо вывода с разделителями по умолчанию «tab» мы можем использовать разделитель, такой как «|» (pipe), как показано в примере ниже:

# comm --output-delimiter="|" file1 file2
aa
bb
||cc
dd
|xx
|yy
|zz

comm V/s diff

comm аналогичен diff, поскольку обе команды сравнивают два файла.

Но comm также может использоваться как uniq; comm выбирает повторяющиеся или уникальные строки между двумя отсортированными файлами, тогда как uniq выбирает повторяющиеся или уникальные строки в том же отсортированном файле.

 

You may also like

Leave a Comment