GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Comm-Befehl mit Beispielen

Einführung

Der comm command ist ein einfaches Linux-Dienstprogramm zum Vergleichen von Dateien mit Fokus auf den gemeinsamen Inhalt. Der Befehl vergleicht zwei sortierte Dateien Zeile für Zeile und zeigt die Ergebnisse in drei Spalten an.

Die folgende Anleitung erläutert die Verwendung von Linux comm Befehl mit Beispielen.

Voraussetzungen

  • Ein System, auf dem Linux ausgeführt wird.
  • Zugang zum Terminal.

Comm-Befehlssyntax

Die comm Der Befehl wird mit mindestens zwei Argumenten ausgeführt, die die Namen der zu vergleichenden Dateien angeben. Das Hinzufügen von Optionen vor Dateinamen passt die Ausgabe an.

Die grundlegenden comm Syntax ist:

comm [file_name_1] [file_name_2]
comm [options] [file_name_1] [file_name_2]

Allerdings wird comm ausgeführt ohne Optionen liefert keine Ergebnisse und gibt die folgende Ausgabe aus:

comm-Befehlsoptionen

Mit comm ist einfach, aber das Anhängen von Optionen bietet zusätzliche Anpassungsmöglichkeiten.

Die folgende Tabelle enthält alle comm Optionen:

Befehl Beschreibung
-1 Druckt die Ausgabe ohne die erste Spalte und blendet die Zeilen aus, die nur für die erste Datei gelten.
-2 Versteckt die zweite Spalte in der Ausgabe (Zeilen, die nur für die zweite Datei gelten).
-3 Druckt nicht die Spalte mit den gemeinsamen Linien.
--check-order Überprüft, ob Dateien sortiert sind.
--nocheck-order Druckt das Ergebnis, ohne zu prüfen, ob die Dateien sortiert sind.
--output-delimiter=[any character] Ersetzt die Standard-Leerzeichen in der Ausgabe durch ein anderes Zeichen.
--total Zeigt die Gesamtzahl der Zeilen in jeder Spalte an.
-z Zeigt die Ausgabezeilen als NULL-terminierte anstelle der mit Newline-terminierten Standardausgabe an.
--help Zeigt Hilfeinformationen an.
--version Zeigt Versionsinformationen an.

Beispiele für die Linux-Kommunikation

Die comm Der Befehl arbeitet mit zwei sortierten Dateien. Um zu verstehen, wie comm funktioniert, richten Sie eine Testumgebung ein:

  1. Erstellen Sie zwei Testdateien.
  2. Benennen Sie die Dateien (z. B. Datei_1 und Datei_2).
  3. Fügen Sie jeder Datei andere Wörter oder Zahlen hinzu.
  4. Stellen Sie sicher, dass sich einige Inhalte überschneiden.

Hinweis: Linux bietet zahlreiche Möglichkeiten, Dateien vom Terminal aus zu erstellen. Am einfachsten ist es, den Touch-Befehl zu verwenden.

Verwenden Sie den cat-Befehl, um die Datei_1 anzuzeigen und Datei_2 Inhalt. Die Ausgabe zeigt, dass sich Dateien in drei Wörtern überschneiden (art , Hund , und Weg ):

Die folgenden Abschnitte verwenden File_1 und Datei_2 um zu erklären, wie comm funktioniert.

Zwei Dateien vergleichen

Vergleichen Sie zwei sortierte Dateien Zeile für Zeile mit:

comm File_1 File_2

Der Befehl gibt Ergebnisse in drei Spalten aus:

  • Spalte 1 zeigt nur Werte, die für die erste Datei eindeutig sind.
  • Spalte 2 druckt Elemente, die nur in der zweiten Datei vorhanden sind.
  • Spalte 3 zeigt den für beide Dateien gemeinsamen Inhalt an:art , Hund , und Weg .

Spalten ausblenden

Verwenden Sie die Argumente -1 , -2 und -3 und die Kombinationen, um nur bestimmte Spalten anzuzeigen. Geben Sie beispielsweise nur Zeilen aus, die beiden Dateien gemeinsam sind, mit:

comm -12 File_1 File_2

Mit -12 mit comm verbirgt die erste und zweite Spalte und lässt nur diejenige übrig, die Zeilen enthält, die von beiden Dateien geteilt werden.

Andererseits -3 verbirgt Spalte drei und zeigt Zeilen an, die für jede Datei einzigartig sind:

comm -3 File_1 File_2

Groß-/Kleinschreibung ignorieren

Vergleich mit comm unterscheidet zwischen Groß- und Kleinschreibung. Alle Wörter in Datei_1 und Datei_2 sind Kleinbuchstaben, also comm erkennt Kunst an , Hund , und Weg wie für beide Dateien gemeinsam.

Wenn jedoch beispielsweise das Wort Kunst ist in Datei_1 in Großbuchstaben aber Kleinbuchstaben in File_2, die Ausgabe ist:

Fallunterschiede beim Wort Kunst /Kunst zwischen zwei Dateien fordert comm auf um das Wort als eindeutig für jede Datei zu registrieren. Während comm akzeptiert -i nicht Als Option zum Ignorieren der Groß-/Kleinschreibung bietet die tr-Option eine Problemumgehung.

Verwenden Sie Tr auf den beiden Dateien, um die Groß-/Kleinschreibung zu konvertieren und dann die Ausgabe in temporäre Dateien umzuleiten (Temp_1 , Temp_2 ):

tr A-Z a-z <File_1 > Temp_1
tr A-Z a-z <File_2 > Temp_2

Tr konvertiert den Inhalt in beiden Dateien in Kleinbuchstaben und erstellt neue Dateien, um die Ausgabe zu speichern (Temp_1 , Temp_2 ). Die Originaldateien bleiben unverändert.

Führen Sie comm aus auf Temp_1 und Temp_2 zum Vergleichen von Dateien unter "Ignorieren" der Groß-/Kleinschreibung:

comm Temp_1 Temp_2

Der Befehl gibt art in Kleinbuchstaben aus als gemeinsames Wort für beide Dateien.

Unsortierte Dateien vergleichen

Die comm Der Befehl erzeugt nur dann eine wertvolle Ausgabe, wenn sortierte Dateien als Argumente verwendet werden. Wenn comm arbeitet mit unsortierten Dateien, die Ausgabe ist unbrauchbar und gibt immer eine Fehlermeldung aus.

Beispielsweise sind die folgenden zwei Dateien nicht sortiert, wie mit cat gezeigt :

Wenn Sie comm verwenden bei unsortierten Dateien druckt die Ausgabe:

Während comm bestimmte Zeilen paart und eine Ausgabe erzeugt, ist die Ausgabe unvollständig und unbrauchbar. Die Fehlermeldung gibt an, dass keine der Dateien sortiert ist.

Um zu überprüfen, ob die Dateien nicht sortiert sind, verwenden Sie comm --check-order :

comm --check-order Not_Sorted_File_1 Not_Sorted_File_2

Die --check-order Option gibt die Fehlermeldung aus und stoppt comm vom Vergleichen von Dateien beim ersten unsortierten Element.

Um comm zu erzwingen Um eine Ausgabe zu drucken und die Fehlermeldung auszublenden, verwenden Sie --nocheck-order :

comm --nocheck-order Not_Sorted_File_1 Not_Sorted_File_2

Die Ausgabe ist nicht zuverlässig. Zum Beispiel das Wort Kunst ist in den Spalten eins und zwei vorhanden, obwohl es für beide Dateien gleich ist.

Der todsichere Weg, comm zu verwenden Bei unsortierten Dateien ist sort anzuwenden. Führen Sie Folgendes aus:

comm <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)

Die Ausgabe zeigt, dass die Wörter art , Hund , und Weg sind für beide Dateien gleich.

Beachten Sie, dass sort ohne Argumente wirkt sich nur auf die Standardausgabe aus und verändert die Quelldateien nicht. Trotzdem sort kann mit anderen comm verwendet werden Optionen.

Um beispielsweise nur Wörter auszugeben, die beiden unsortierten Dateien gemeinsam sind, verwenden Sie:

comm -12 <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)

Quelldateien sortieren und dann comm ausführen , verwenden Sie sort -o . Der -o Argument speichert die sortierte Ausgabe in einer bestimmten Datei.

Sortieren Sie beispielsweise Not_Sorted_File_1 und speichern Sie die Ausgabe in derselben Datei mit:

sort -o Not_Sorted_File_1 Not_Sorted_File_1

Ausführen von cat Nach dem Sortieren der Datei wird angezeigt, dass die Datei jetzt sortiert ist. Wiederholen Sie den gleichen Vorgang für die zweite Datei:

sort -o Not_Sorted_File_2 Not_Sorted_File_2

Führen Sie comm aus um Dateien zu vergleichen:

comm Not_Sorted_File_1 Not_Sorted_File_2

Verzeichnisse vergleichen

Verwenden Sie comm mit ls, um Dateinamen in zwei Verzeichnissen zu vergleichen. Vergleichen Sie beispielsweise Verzeichnis1 und Verzeichnis2 :

comm <(ls Directory1) <(ls Directory2)

Die erste Spalte stellt Dateinamen dar, die für Verzeichnis1 eindeutig sind , die zweite die einzigartigen Director y2 , und der dritte steht für Dateinamen, die für beide Ordner gleich sind.

Beim Ausführen von comm mit ls , betrachtet der Befehl nur Dateinamen, nicht den Inhalt. Dateien, die für beide Ordner als gemeinsam aufgeführt sind, können sich dennoch unterscheiden, selbst wenn sie denselben Namen haben.

Komm mit STDIN verwenden

Um eine Datei mit der Standard-Terminaleingabe zu vergleichen, verwenden Sie einen Bindestrich als eines der Argumente mit comm .

Vergleichen Sie beispielsweise Datei_1 mit der Standardeingabe mit:

comm File_1 -

Schreiben Sie Text zum Vergleichen von Datei_1 direkt zum Terminal oder verwenden Sie einen Texteditor.

Nach dem Drücken von Enter , gibt der Befehl die Ausgabe in drei Spalten aus und verwendet STDIN anstelle von File_2.

Die erste Spalte stellt Inhalte dar, die nur für Datei_1 gelten , die zweite zeigt Wörter, die nur in der Standardeingabe vorkommen, und die dritte Wörter, die beiden gemeinsam sind.

Ändern Sie das Standardtrennzeichen

Der comm Die Ausgabe trennt Spalten standardmäßig durch Leerzeichen. Um das Trennzeichen zu ändern, verwenden Sie --output-delimiter Option.

Zum Beispiel, um * zu verwenden Anstelle von Leerzeichen führen Sie Folgendes aus:

comm --output-delimiter=* File_1 File_2

Die Ausgabe zeigt diese Wörter in Datei_1 haben kein Sternchen, die in Datei_2 haben ein Sternchen und Elemente, die beiden Dateien gemeinsam sind, haben zwei Sternchen.

Zeile Anzahl anzeigen

Zeigen Sie die Gesamtzahl der Zeilen in jeder Spalte mit --total an Möglichkeit:

comm --total File_1 File_2

Die Ausgabe gibt die Anzahl der Zeilen am Ende jeder Spalte aus.

Fazit

Nachdem Sie die Schritte aus diesem Tutorial befolgt haben, wissen Sie, wie Sie Dateien Zeile für Zeile mit comm vergleichen Befehl.

Lernen Sie als Nächstes eine andere Methode zum Vergleichen von Dateien mit dem diff-Befehl kennen.


Linux
  1. wc Linux-Befehl mit Beispielen

  2. Linux Tee-Befehl mit Beispielen

  3. JQ-Befehl in Linux mit Beispielen

  4. „comm“-Befehl in Linux mit Beispielen

  5. Linux-rsync-Befehl mit praktischen Beispielen

Linux zforce Command Tutorial mit Beispielen

15 Linux-PS-Befehl mit Beispielen

Linux-Suchbefehl mit praktischen Beispielen

Linux-IP-Befehl mit Beispielen

Tutorial für Linux-Suchbefehle (mit Beispielen)

lsof-Befehl unter Linux mit Beispielen