Ontwikkelaars gebruiken waarschijnlijk dagelijks het Unix-programma diff om verschillende versies van een bestand te vergelijken, maar de POSIX-standaard definieert ook het programma comm. Dit is specifiek bedoeld om gesorteerde bestanden te vergelijken, bijvoorbeeld woordenlijsten of bestanden met accountnamen. Comm toont zijn uitvoer in drie kolommen: links toont het regels die enkel in het eerste bestand voorkomen, in het midden regels die enkel in het tweede bestand voorkomen, en rechts regels die in beide bestanden voorkomen. Een regel die dubbel voorkomt in één van de bestanden zal één keer in de derde kolom voorkomen en één keer in de kolom van het bestand waarin hij dubbel voorkomt. Zo krijg je onmiddellijk een overzicht van de verschillen tussen beide bestanden.

Opties

Voor dit eenvoudigste geval geef je de twee bestanden gewoon als parameters door aan het programma:

$ comm bestand1 bestand2

Om het programma in scripts te gebruiken, heb je echter de uitvoer waarschijnlijk liever niet in de drie kolommen. Met de opties -1, -2 en -3 laat het programma de eerste, tweede respectievelijk derde kolom weg. Je kunt deze ook combineren, bijvoorbeeld als je enkel de regels wil zien die in beide bestanden voorkomen:

$ comm -12 bestand1 bestand2

Als je enkel de regels wil zien die verschillen in beide bestanden, dan kan dat door de derde kolom weg te laten en met het programma tr de tabs van de uitvoer in de tweede kolom te verwijderen zodat je alles in één kolom te zien krijgt:

$ comm -3 bestand1 bestand2 | tr -d "\t"

Directory's

Comm is bedoeld om verschillen tussen bestanden te bekijken, maar het kan ook dienen om de inhoud van directory's te vergelijken. Heb je bijvoorbeeld twee directory's die grotendeels identiek zijn maar elk nog extra bestanden bevatten, dan kun je de verschillen mooi visualiseren met comm:

$ comm <(find dir1 -name "*"|sort|sed "s/dir1\///") <(find dir2 -name "*"|sort|sed "s/dir2\///")

Met diff -rq dir1 dir2 krijg je ook de verschillen te zien, maar dan niet in drie kolommen gerangschikt. Als beide directory's geen subdirectory's hebben, kan het overigens nog eenvoudiger:

$ comm <(ls -1 dir1) <(ls -1 dir2)