Comm - Compare sorted files FILE1 and FILE2 line by line

Usage

comm [OPTION]... FILE1 FILE2

Flags

When FILE1 or FILE2 (not both) is -, read standard input.

With no options, produce 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.

  -1              suppress column 1 (lines unique to FILE1)
  -2              suppress column 2 (lines unique to FILE2)
  -3              suppress column 3 (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
  --total           output a summary
  -z, --zero-terminated    line delimiter is NUL, not newline
      --help     display this help and exit
      --version  output version information and exit

Note, comparisons honor the rules specified by 'LC_COLLATE'.

Examples:
  comm -12 file1 file2  Print only lines present in both file1 and file2.
  comm -3 file1 file2  Print lines in file1 not in file2, and vice versa.

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation at: <https://www.gnu.org/software/coreutils/comm>
or available locally via: info '(coreutils) comm invocation'

Examples

It outputs three space-offset columns:

  • The first contains lines that are unique to the first file or argument
  • The second contains lines that are unique to the second file or argument
  • The third column contains lines that are shared by both files

Compare normally

Content file 1 and 2

$ cat file1
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5

$ cat file2
192.168.1.1
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
$ comm file1 file2                
                192.168.1.1
192.168.1.2
                192.168.1.3
                192.168.1.4
                192.168.1.5
        192.168.1.6

When only the matching lines are at interest, use the -n switch, where n is the field number(s).

$ comm -12 file1 file2
192.168.1.1
192.168.1.3
192.168.1.4
192.168.1.5

Compare where content of lines do not directly match but are matched at other lines in file

$ cat file1      
abcd
efgh

$ cat file2
abcd
aaaa
efgh
$ comm file1 file2
        abcd
    aaaa
        efgh

URL list