## 11.2. Comparing Three Different Versions with diff3

You can use the diff3 command to look at differences between three files. Here are three sample files, repeated from Section 11.1:

test1 | test2 | test3
--- | --- | ---
apples | apples | oranges
oranges | oranges | walnuts
walnuts | grapes | chestnuts

For each set of differences, diff3 displays a row of equal signs (`====`) followed by 1, 2, or 3, indicating which file is different; if no number is specified, then all three files differ. Then, using ed-like notation (Section 11.1), the differences are described for each file:

>     $ diff3 test1 test2 test3
>     ====3
>     1:1c
>     2:1c
>       apples
>     3:0a
>     ====
>     1:3c
>       walnuts
>     2:3c
>       grapes
>     3:2,3c
>       walnuts
>       chestnuts

With the output of diff3, it is easy to keep track of which file is which; however, the prescription given is a little harder to decipher. To bring these files into agreement, the first range of text (after `====3`) shows that you would have to add `apples` at the beginning of the third file (`3:0a`). The second range tells you to change line 3 of the second file to line 3 of the first file -- change lines 2 and 3 of the third file, effectively dropping the last line.

The diff3 command also has a -e option for creating an editing script for ed. It doesn't work quite the way you might think. Basically, it creates a script for building the first file from the second and third files.

>     $ diff3 -e test1 test2 test3
>     3c
>     walnuts
>     chestnuts
>     .
>     1d
>     .
>     w
>     q

If you reverse the second and third files, a different script is produced:

>     $ diff3 -e test1 test3 test2
>     3c
>     grapes
>     .
>     w
>     q

As you might guess, this is basically the same output as doing a diff on the first and third files.

-- DD

Copyright © 2003 O'Reilly & Associates. All rights reserved.