TheJoyOfHack

For people who like to make things

How to Subtract One File From Another

Let’s say you have two text files, FileA and FileB.  You want a file that has all the lines of FileA that are not in FileB.  How do you do that?

The simple answer is grep. The -v option inverts the search, and only prints lines that do not match.  The -f option is used to specify a file that contains a list of all the patterns for which to look - one pattern per line.

Let’s say FileA looks like this:

1 Alice 10
2 Bob   15
3 Alice 16
4 Carl  10
5 Dave  20

and FileB looks like this:

2 Bob   15
4 Carl  10

Then, you can use the following command to print out all lines from FileA that are not in FileB:

1
2
3
4
5
    $ grep -vf FileB FileA
    1 Alice 10
    3 Alice 16
    5 Dave  20
    $ 

You could, alternatively, have gotten the same results if FileB looked like this:

.*Bob.*
.*Carl.*