Linux / Befehl comm: Zwei sortierte Dateien vergleichen

comm vergleicht zwei sortierte Dateien Zeile für Zeile. Es zeigt Zeilen, die nur in der ersten Datei vorkommen, Zeilen, die nur in der zweiten Datei vorkommen, und Zeilen, die in beiden vorhanden sind, in drei Spalten an.

Standardmäßig unterscheiden Tabs die zweite und die dritte Spalte. Verwenden Sie -1, -2 oder -3, um die entsprechende Spalte auszublenden. Wenn Sie Änderungen nach Zeilenposition sehen müssen, ist diff besser geeignet.

Grundlegende Syntax

comm [options] sorted_file1 sorted_file2

Implementierungen und Optionen können je nach Distribution variieren. Prüfen Sie die Dokumentation Ihres Systems mit man comm.

Beispiele

Drei Arten von Zeilen anzeigen

Vergleichen Sie nach dem Sortieren beider Dateien nach denselben Kriterien.

comm old.sorted new.sorted

Nur gemeinsame Zeilen anzeigen

Die erste und zweite Spalte ausblenden, nur die dritte gemeinsame Spalte belassen.

comm -12 old.sorted new.sorted

Nur Zeilen in der zweiten Datei

Blendet die erste und dritte Spalte aus, sodass nur die ausschließlich in der zweiten Datei enthaltenen Zeilen sichtbar bleiben.

comm -13 old.sorted new.sorted

Die drei Spalten und gemeinsamen Zeilen lesen

comm unterscheidet Zeilen nach Spalte, die nur in der ersten Datei, der zweiten Datei und der Zeile, die beiden Dateien gemeinsam ist, existiert. -12 blendet die ersten beiden Spalten aus und belässt nur die gemeinsame Zeile.

printf 'apple\nbanana\n' > first.txt
printf 'banana\ncherry\n' > second.txt
comm -12 first.txt second.txt

Beispielausgabe:

banana

Beide Dateien müssen innerhalb derselben Gebietsschemavorgabe vorab sortiert sein. Unsortierte Eingaben machen es schwer, dem Inhalt der Spalten zu vertrauen. Denken Sie daran, dass comm das Vorhandensein von Zeilen vergleicht und diff Änderungen einschließlich der Zeilenpositionen zeigt.

Hauptoptionen und Format

Optionen/Format Beschreibung
-1 Spalten von Zeilen nur in der ersten Datei ausblenden.
-2 Spalten von Zeilen nur in der zweiten Datei ausblenden.
-3 Spalten von Zeilen ausblenden, die in beiden Dateien gemeinsam sind.
--check-order Überprüfen Sie die Sortierreihenfolge in der GNU-Implementierung.

Vorsichtsmaßnahmen bei der Verwendung

Sortieren Sie beide Eingabedateien unter Verwendung derselben Gebietsschemavorgabe. Zum Beispiel sollten Dateien, die mit LC_ALL=C sort sortiert wurden, auch unter dem C-Gebietsschema verglichen werden. Da comm sortierte Zeilen anstelle der Zugehörigkeit zur Menge vergleicht, sollten Sie vor dem Vergleich festlegen, wie doppelte Zeilen interpretiert werden sollen.

Häufig gestellte Fragen

Was bedeuten die Spalten im comm-Ergebnis?

Die erste Spalte enthält Zeilen, die nur in Datei1 vorkommen, die zweite Spalte enthält Zeilen, die nur in Datei2 vorkommen, und die dritte Spalte enthält Zeilen, die in beiden Dateien vorkommen.

Offizielle Dokumentation

Für das genaue Verhalten der Optionen siehe das GNU Coreutils-Handbuch.