Search code examples
unixtext-files

Find lines from a file which are not present in another file


I have two files (let's say a.txt and b.txt), both of which has a list of names. I have already run sort on both the files.

Now I want to find lines from a.txt which are not present in b.txt.

(I spent lot of time to find the answer for this question, so documenting it for future reference)


Solution

  • The command you have to use is not diff but comm

    /usr/bin/comm -23 a.txt b.txt
    

    By default, comm outputs 3 columns: left-only, right-only, both. The -1, -2 and -3 switches suppress these columns.

    So, -23 hides the right-only and both columns, showing the lines that appear only in the first (left) file.

    If you want to find lines that appear in both, you can use -12, which hides the left-only and right-only columns, leaving you with just the both column.