Es ist oft nützlich, Versionen von Textdateien zu vergleichen. Für Systemadministratoren und Softwareentwickler ist dies besonders wichtig. Ein Systemadministrator muss beispielsweise eine vorhandene Konfigurationsdatei mit einer früheren Version vergleichen, um ein Systemproblem zu diagnostizieren. Ebenso muss ein Programmierer häufig sehen, welche Änderungen an Programmen im Laufe der Zeit vorgenommen wurden.
Die Komm zeigt einen zeilenweisen Vergleich zweier sortierter Dateien an. Die erste der drei angezeigten Spalten listet die Zeilen auf, die nur in Datei1 gefunden wurden, die zweite Spalte listet die Zeilen auf, die nur in Datei2 gefunden wurden, und die dritte listet die Zeilen auf, die beiden Dateien gemeinsam sind. Die grundlegende Syntax für den „comm“-Befehl lautet:
# comm [options] file1 file2
Argumente
Die Argumente file1 und file2 sind Pfadnamen der Dateien, die comm vergleicht. Die Verwendung eines Bindestrichs (–) anstelle von Datei1 oder Datei2 bewirkt, dass comm die Standardeingabe anstelle dieser Datei liest.
Optionen
Sie können die Optionen kombinieren. Ohne Optionen erzeugt comm eine dreispaltige Ausgabe.
Optionen | Funktion |
---|---|
-1 | Zeigt Spalte 1 nicht an (zeigt keine Zeilen an, die nur in Datei1 gefunden wurden). |
-2 | Zeigt Spalte 2 nicht an (zeigt keine Zeilen an, die nur in Datei2 gefunden wurden). |
-3 | Zeigt Spalte 3 nicht an (zeigt keine Zeilen an, die in beiden Dateien gefunden wurden). |
-i | Groß- und Kleinschreibung beim Vergleich von Zeilen. |
– -check-order | Überprüfen Sie die Reihenfolge der Eingaben, auch wenn alle Eingabezeilen paarbar sind |
– -nocheck-order | Ignoriere die Reihenfolge der Eingabe |
– -output-delimiter=STR | trennt Spalten mit dem Trennzeichen „STR“ |
– -Hilfe | Zeigt ein Hilfemenü an |
– -Version | Informationen zur Befehlsversion anzeigen |
Beispiele für die Verwendung des Befehls „comm“ unter Linux
Beispiel 1:Grundlegende Verwendung
Sehen wir uns ein einfaches Beispiel für den Befehl „comm“ an, um zwei sortierte Dateien zu vergleichen. Die Dateien sehen wie folgt aus:
# cat file1 aa bb cc dd
# cat file2 cc xx yy zz
Der Befehl comm vergleicht Dateien Zeile für Zeile und gibt identische Zeilen aus. Zum Beispiel:
# comm file1 file2 aa bb cc dd xx yy zz
Diese Befehlsausgabe wird in drei Spalten angezeigt:Spalte 1 zeigt nur Zeilen in Datei1 (aa, bb, dd), Spalte2 zeigt jede Zeile nur in Datei2 (xx, yy, zz) und Spalte 3 zeigt jede Zeile, die zwischen den gleich ist zwei Dateien (cc). Dies ist ein viel detaillierterer Vergleich als mit diff, und die Ausgabe kann überwältigend sein, wenn Sie nur ein oder zwei einfache Änderungen finden oder überprüfen möchten. Es kann jedoch unglaublich nützlich sein, wenn Sie mit beiden Dateien nicht besonders vertraut sind und sehen möchten, wie sie im Vergleich abschneiden.
Beispiel 2:Spalten unterdrücken
comm unterstützt Optionen in der Form -n, wobei n entweder 1, 2 oder 3 ist. Wenn sie verwendet werden, geben diese Optionen an, welche Spalte(n) unterdrückt werden sollen. Wenn wir beispielsweise nur die Zeilen ausgeben wollten, die von beiden Dateien gemeinsam genutzt werden, würden wir die Ausgabe der Spalten 1 und 2 unterdrücken:
# comm -12 file1 file2 cc
Ebenso können Sie mit den folgenden Befehlen nur die Zeilen anzeigen, die nur in Datei1 bzw. Datei2 vorhanden sind.
# comm -23 file1 file2 aa bb dd
# comm -13 file1 file2 xx yy zz
Beispiel 3:Sortierprüfung bei Eingabe
Der Befehl comm bietet 2 Optionen, um nach sortierten Eingaben zu suchen:
1. –Bestellung prüfen
2. –nocheck-order
Die –Prüfreihenfolge prüft vor dem Vergleich, ob die Eingabe richtig sortiert ist. Wenn die Eingabe nicht sortiert ist, erhalten Sie einen Fehler wie unten gezeigt:
# comm --check-order file1 file2 aa bb cc dd xx comm: file 2 is not in sorted order
Während die –nocheck-order ermöglicht den Dateivergleich auch dann, wenn die Eingabe nicht im sortierten Format vorliegt. Zum Beispiel:
# cat file1 aa bb cc dd
# cat file2 xx cc yy zz
# comm --nocheck-order file1 file2 aa bb cc dd xx yy zz
Beispiel 4:Ausgabe mit Trennzeichen
comm bietet auch eine Option zum Löschen der Ausgabe mit dem vom Benutzer bereitgestellten Trennzeichen. Beispielsweise können wir anstelle der standardmäßig durch „Tabulator“ getrennten Ausgabe ein Trennzeichen wie „|“ verwenden. (Pipe), wie im folgenden Beispiel gezeigt:
# comm --output-delimiter="|" file1 file2 aa bb ||cc dd |xx |yy |zz
comm V/s diff
Komm ist ähnlich wie diff , dass beide Befehle zwei Dateien vergleichen. Aber comm kann auch wie uniq verwendet werden; comm wählt doppelte oder eindeutige Zeilen zwischen zwei sortierten Dateien aus, während uniq doppelte oder eindeutige Zeilen innerhalb derselben sortierten Datei auswählt.