Common – compare two sorted files line by line and write to standard output:
the lines that are common, plus the lines that are unique.
comm [options]... File1 File2
-1 suppress lines unique to file1 -2 suppress lines unique to file2 -3 suppress lines that appear in both files
A file name of `-‘ means standard input.
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.
$ comm -23 <(sort words.txt | uniq) <(sort countries.txt | uniq) If the file words.txt contains a subset of countries.txt then the above will return nothing. If the file words.txt contains items that don't exist in countries.txt then the above will return those unique items. To return the lines that are in both words.txt and countries.txt use: $ comm -12 <(sort words.txt | uniq) <(sort countries.txt | uniq)