Comm command in linux

Comm command in linux

Команда comm позволяет использовать одноименную утилиту для сравнения двух текстовых файлов с отсортированными по алфавиту строками. Данной утилите довольно сложно найти достойное применение, тем не менее, о ней стоит знать.

Базовый синтаксис команды выглядит следующим образом:

Перед использованием текстовых файлов строки в них должны быть отсортированы по алфавиту в соответствии с используемой локалью; для выполнения этой работы вполне подойдет утилита 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):

Читайте также:  Linux операционная система чей страны

$ comm -12 comm1 comm2
001
003
005

Источник

comm — Unix, Linux Command

comm — compare two sorted files line by line and write to standard output: the lines that are common, plus the lines that are unique.

SYNOPSIS

DESCRIPTION

Before ‘comm’ can be used, the input files must be sorted using the collating sequence specified by the ‘LC_COLLATE’ locale, with trailing newlines significant. If an input file ends in a non-newline character, a newline is silently appended. The ‘sort’ command with no options always outputs a file that is suitable input to ‘comm’. With no options, ‘comm’ produces three column output. Column one contains lines unique to FILE1, column two contains lines unique to FILE2, and column three contains lines common to both files. Columns are separated by a single TAB character.

The options -1, -2, and -3 suppress printing of the corresponding columns. Unlike some other comparison utilities, ‘comm’ has an exit status that does not depend on the result of the comparison. Upon normal completion ‘comm’ produces an exit code of zero. If there is an error it exits with nonzero status.

OPTIONS

-1 suppress lines unique to file1.
-2 suppress lines unique to file2.
-3 suppress lines that appear in both files.

EXAMPLES

Show the lines unique to words.txt

$ cat words.txt Apple Banana Orange India US Canada $ cat countries.txt India US Canada $ comm -23 < (sort words.txt | uniq) < (sort countries.txt | uniq) Apple Banana Orange

Show the lines common to words.txt and countries.txt.

Источник

How to use comm command in Linux

The comm command is used in Linux to compare different files, this command compares each and every line of the files and displays the unique lines and common lines of the files in separate columns. The need for comparison of files mostly occurs to the programmers; when they need to find out the modifications made in the program over time.

In this write-up, we are going to explain the utilization of the comm command in Linux with a detailed explanation.

How to use the comm command in Linux

The comm command can be used to compare two files line by line, the general syntax of using the comm command:

Читайте также:  Linux ubuntu работа с терминалом

The above command syntax will display the result in three columns; the first column will display the unique lines of the file1, the second column will display the unique lines of the file2, and the third column will display the common lines of both files.

We can also use some options along with the comm command; some commonly used options are:

Options Explanation
-1 It will not display the first column of the result, which contains the unique lines of the file1
-2 It will not display the second column of the result, which contains the unique lines of the file2
-3 It will not display the third column of the result, which contains the common lines of both files; file1 and file2
–check-order It will check all the lines of both files are properly sorted or not
–nocheck-order It will not check the sorting order and just display the results
–help It will show a help message prompt and will exit
–version It will show the version of the information and exits
–total It will display the total number of lines present in each column of the result
-z, –zero-delimiter It will display the files separately instead of the columns; the value of zero delimiters is null
–output-delimiter=[any character] It will replace the “spaces” in the results by using the character you want to put there

To understand all these options, we will consider two text files with the name; mytestfile1.txt and mytestfile2.txt, whose contents can be displayed using the commands:

First, we will compare both files using the comm command without any options, for this purpose, we have to use the command:

As we know, the comm command is applicable on the sorted files, and the given files in the command are not sorted so it generated the “files not sorted” warnings, to remove these comments, we will use the “–nocheck-order” flag, which will ignore checking the sorting order and display the results:

Читайте также:  Samba сервер windows linux

In the above image, we have marked three columns for a better understanding of the results, the first column displayed the unique lines of mytestfile1.txt which is only “Fedora”, the second column displayed the unique lines of mytestfile2.txt which is only “Debian”, and the last column displayed the common lines of both files. If we want to display column 1 (unique lines of mytestfile1.txt) and column 3 (common lines of both files), we will suppress column 2 by using the “-2” flag:

Likewise, we can suppress both column 1, column 2, and display only column 3 (containing the common lines of both files) by running the command:

The output displayed only the third column of the result, in order to find out the total number of lines of each column, use the command:

To check whether the sorting order of both files are either in the correct order or not, execute the comm command using the “–check-order” flag:

The results show that file 1 is not in sorted order because the names of the files are not arranged alphabetically either in ascending order or descending order, similarly, the “–zero-delimiter” flag is used:

Likewise, we can use the “–output-delimiter=** ” with the comm command to replace the space with “star (*)”:

To check the version of the comm command:

If you want to know more about the comm command, you can check its manual by using the command:

Conclusion

The comm command is used to compare the lines of the sorted files in Linux, though, there are some other ways too for comparing files such as the diff command and using the vim editor. The comm command is easy to use and recommended where the files contain scripts and only a simpler comparison is needed. In this write-up, we have discussed the comm command and its various options briefly with the help of examples.

About the author

Hammad Zahid

I'm an Engineering graduate and my passion for IT has brought me to Linux. Now here I'm learning and sharing my knowledge with the world.

Источник

Оцените статью
Adblock
detector