comm

Compare two sorted files line by line. Output the lines that are common, plus the lines that are unique.

Syntax
      comm [options]... File1 File2

Options
   -1   Suppress lines unique to file1

   -2   Suppress lines unique to file2

   -3   Suppress lines that appear in both files

   --check-order
        Check that the input is correctly sorted, even if all input lines are pairable 

   --nocheck-order
        Do not check that the input is correctly sorted.

   --output-delimiter=STR
        Separate columns with STR.

   --help
        Display help and exit.

   --version
        Output version information and exit

   A file name of '-' means standard input.

With no options, 'comm' produces three text columns as output. The utility reads file1 and file2, which should be sorted lexically.
This will output:

 Lines only in file1; Lines only in file2; Lines in both files. 

If printing of a column is suppressed, the output will be padded with TAB characters.

The options -1, -2, and -3 suppress printing of the corresponding columns.
The filename '-' means standard input.

Each column will have a number of tab characters prepended to it equal to the number of lower numbered columns that are being printed. For example, if column number two is being suppressed, lines printed in column number one will not have any tabs preceding them, and lines printed in column number three will have one.

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'.

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.

Examples

Return the unique lines in the file words.txt that don’t exist in countries.txt

$ comm -23 <(sort words.txt | uniq) <(sort countries.txt | uniq)

Return the lines that are in both words.txt and countries.txt:

$ comm -12 <(sort words.txt | uniq) <(sort countries.txt | uniq)

Return the files that are in the directory 'march' but not in the directory 'april':

$ comm -23 <(ls march) <(ls april)

Return the files that are in the directory 'march' but not in the directory 'april':

$ comm -23 <(ls march) <(ls april)

Return the files that are in the directory 'april' but not in the directory 'march':

$ comm -13 <(ls march) <(ls april)

“You don’t sew with a fork, so I see no reason to eat with knitting needles” ~ Miss Piggy, on eating Chinese Food

Related Linux commands

cmp - Compare two files.
diff - Display the differences between two files.
diff3 - Show differences among three files.
sdiff - merge two files interactively.
head - Output the first part of file(s).
sort - Sort text files.
Command substitution - `with backquotes`
Equivalent Windows commands: COMP / FC - Compare and display Characters/Lines which do not match. (also the WINDIFF GUI)


 
Copyright © 1999-2024 SS64.com
Some rights reserved