From the man page "comm - compare two sorted files line by line"
It's part of the core utils package and you can install it using
dnf install coreutils on RPM distros, or
apt install coreutils on Debian based ones.
[host@hpr]$ man comm COMM(1) User Commands COMM(1) NAME comm - compare two sorted files line by line SYNOPSIS comm [OPTION]... FILE1 FILE2 DESCRIPTION Compare sorted files FILE1 and FILE2 line by line. 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. AUTHOR Written by Richard M. Stallman and David MacKenzie. REPORTING BUGS GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report any translation bugs to <https://translationproject.org/team/> COPYRIGHT Copyright © 2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO join(1), uniq(1) Full documentation <https://www.gnu.org/software/coreutils/comm> or available locally via: info '(coreutils) comm invocation' GNU coreutils 9.1
I always find that confusing, so for me it's a lot easier to see what is going on by creating some example files.
First let's create some test files by echoing the number 1 and the
number 2 into a file called
[host@hpr]$ echo "1" > 1and2.txt [host@hpr]$ echo "2" >> 1and2.txt
And let's create another one with the value 2 and 3 and we'll call it
[host@hpr]$ echo "2" > 2and3.txt [host@hpr]$ echo "3" >> 2and3.txt
Then we can see what each command does using these examples.
[host@hpr]$ comm -1 -2 1and2.txt 2and3.txt 2 [host@hpr]$ comm -1 -3 1and2.txt 2and3.txt 3 [host@hpr]$ comm -2 -3 1and2.txt 2and3.txt 1