Einführung
In der Linux-Umgebung ist das Vergleichen von Dateien eine häufige Aufgabe für Systemadministratoren und Entwickler. Der Befehl comm ist ein leistungsstarkes Werkzeug, das es Benutzern ermöglicht, zwei sortierte Textdateien zeilenweise zu vergleichen und die einzigartigen und gemeinsamen Zeilen zwischen ihnen zu identifizieren.
Dieser Lab (LabEx) wird Sie durch die Verwendung des comm-Befehls zur Analyse von Textdateien führen. Sie werden lernen, wie Sie Testdateien erstellen, deren Inhalte vergleichen und spezifische Informationen aus den Vergleichsergebnissen extrahieren. Am Ende dieses Labs werden Sie ein solides Verständnis davon haben, wie Sie diesen vielseitigen Befehl für Dateivergleichsaufgaben in Linux nutzen können.
Bereiten Sie Ihre Textdateien vor
Bevor wir den comm-Befehl verwenden können, müssen wir einige Beispiel-Textdateien erstellen, mit denen wir arbeiten können. In diesem Schritt werden wir zwei Textdateien erstellen, die Listen von gängigen Linux-Befehlen enthalten.
Zunächst erstellen wir ein Arbeitsverzeichnis, um unsere Dateien zu organisieren:
mkdir -p ~/project/comm-lab
cd ~/project/comm-lab
Jetzt erstellen wir unsere erste Textdatei mit dem Namen commands1.txt mit einer Liste von Linux-Befehlen:
echo -e "ls\ncd\npwd\nmkdir\ntouch\ncomm\nsed\nawk" | sort > commands1.txt
Dieser Befehl macht Folgendes:
echo -egibt den Text mit Interpretation der Backslash-Escapes aus (\nerstellt neue Zeilen)- Die Liste der Befehle wird an den
sort-Befehl weitergeleitet (|), um die Elemente alphabetisch zu sortieren - Die sortierte Ausgabe wird dann in eine Datei mit dem Namen
commands1.txtumgeleitet (>)
Erstellen wir nun eine zweite Textdatei mit dem Namen commands2.txt mit einer etwas anderen Liste von Befehlen:
echo -e "ls\ncd\npwd\ncomm\ngrep\nfind\nsed" | sort > commands2.txt
Um zu überprüfen, ob unsere Dateien korrekt erstellt wurden, können wir den cat-Befehl verwenden, um ihren Inhalt anzuzeigen:
cat commands1.txt
Sie sollten die folgende Ausgabe sehen:
awk
cd
comm
ls
mkdir
pwd
sed
touch
Jetzt überprüfen wir den Inhalt der zweiten Datei:
cat commands2.txt
Sie sollten sehen:
cd
comm
find
grep
ls
pwd
sed
Beachten Sie, dass einige Befehle in beiden Dateien vorkommen (wie cd, ls, pwd, comm, sed), während andere für jede Datei einzigartig sind. Diese Einrichtung ermöglicht es uns, verschiedene Funktionen des comm-Befehls in den nächsten Schritten zu demonstrieren.
Verwendung des grundlegenden comm-Befehls
Jetzt, da unsere sortierten Textdateien bereit sind, können wir die grundlegende Verwendung des comm-Befehls erkunden. Der comm-Befehl vergleicht zwei sortierte Dateien zeilenweise und gibt drei Spalten aus:
- Zeilen, die nur in der ersten Datei vorkommen
- Zeilen, die nur in der zweiten Datei vorkommen
- Zeilen, die in beiden Dateien gemeinsam sind
Führen wir den grundlegenden comm-Befehl aus, um unsere beiden Dateien zu vergleichen:
cd ~/project/comm-lab
comm commands1.txt commands2.txt
Sie sollten eine Ausgabe ähnlich dieser sehen:
awk
cd
comm
find
grep
ls
mkdir
pwd
sed
touch
Die Ausgabe mag zunächst verwirrend erscheinen, aber sie folgt einem bestimmten Format:
- Spalte 1 (keine Tabulatoren am Anfang der Zeile): Zeilen, die nur in
commands1.txtvorkommen (awk,mkdir,touch) - Spalte 2 (ein Tabulator am Anfang): Zeilen, die nur in
commands2.txtvorkommen (find,grep) - Spalte 3 (zwei Tabulatoren am Anfang): Zeilen, die in beiden Dateien gemeinsam sind (
cd,comm,ls,pwd,sed)
Diese Standardausgabe ermöglicht es Ihnen, alle Unterschiede und Gemeinsamkeiten auf einen Blick zu sehen, aber sie kann aufgrund der Tabulatorformatierung schwer zu lesen sein. Im nächsten Schritt werden wir lernen, wie wir diese Ausgabe mit den Optionen des comm-Befehls nützlicher gestalten können.
Unterdrücken von Spalten mit comm-Optionen
Die Standardausgabe des comm-Befehls kann aufgrund ihres Spaltenformats schwer zu lesen sein. Glücklicherweise bietet comm Optionen, um bestimmte Spalten auszublenden, was es einfacher macht, nur die benötigten Informationen zu extrahieren.
Die Optionen sind:
-1: Blendet Spalte 1 aus (Zeilen, die nur in der ersten Datei vorkommen)-2: Blendet Spalte 2 aus (Zeilen, die nur in der zweiten Datei vorkommen)-3: Blendet Spalte 3 aus (Zeilen, die in beiden Dateien gemeinsam sind)
Diese Optionen können kombiniert werden, um nur die Daten anzuzeigen, an denen Sie interessiert sind.
Finden von Zeilen, die nur in der ersten Datei vorkommen
Um nur die Zeilen anzuzeigen, die nur in der ersten Datei (commands1.txt) vorkommen, verwenden wir die Optionen -2 und -3, um Spalten 2 und 3 auszublenden:
cd ~/project/comm-lab
comm -23 commands1.txt commands2.txt
Ausgabe:
awk
mkdir
touch
Dies sind die Befehle, die nur in commands1.txt vorkommen.
Finden von Zeilen, die nur in der zweiten Datei vorkommen
Ähnlich dazu, um nur die Zeilen anzuzeigen, die nur in der zweiten Datei (commands2.txt) vorkommen, verwenden wir die Optionen -1 und -3:
comm -13 commands1.txt commands2.txt
Ausgabe:
find
grep
Dies sind die Befehle, die nur in commands2.txt vorkommen.
Finden von gemeinsamen Zeilen
Um nur die Zeilen anzuzeigen, die in beiden Dateien gemeinsam sind, verwenden wir die Optionen -1 und -2:
comm -12 commands1.txt commands2.txt
Ausgabe:
cd
comm
ls
pwd
sed
Dies sind die Befehle, die in beiden Dateien vorkommen.
Speichern der Ergebnisse in Dateien
Es ist oft nützlich, diese Ergebnisse in separate Dateien zu speichern, um sie später zu referenzieren oder zu verarbeiten. Machen wir das:
comm -23 commands1.txt commands2.txt > unique_to_file1.txt
comm -13 commands1.txt commands2.txt > unique_to_file2.txt
comm -12 commands1.txt commands2.txt > common_lines.txt
Lassen Sie uns den Inhalt dieser neuen Dateien überprüfen:
echo "Contents of unique_to_file1.txt:"
cat unique_to_file1.txt
echo "Contents of unique_to_file2.txt:"
cat unique_to_file2.txt
echo "Contents of common_lines.txt:"
cat common_lines.txt
Die Ausgabe wird die Zeilen anzeigen, die für jede Datei einzigartig sind, sowie die gemeinsamen Zeilen, genau wie wir es in unseren vorherigen Befehlen gesehen haben.
Diese Techniken sind nützlich, um Konfigurationsdateien zu vergleichen, Unterschiede zwischen verschiedenen Versionen einer Datei zu finden oder gemeinsame Elemente zwischen Datensätzen zu identifizieren.
Praktische Beispiele für die Verwendung von comm
Nachdem Sie die grundlegende Verwendung des comm-Befehls verstanden haben, wollen wir einige praktische Beispiele betrachten, die seine Nützlichkeit in realen Szenarien zeigen.
Beispiel 1: Finden neuer Einträge
Stellen Sie sich vor, Sie haben zwei Listen von Benutzern - eine von der vergangenen Woche und eine von heute. Sie möchten herausfinden, welche Benutzer neu hinzugefügt wurden (seit der vergangenen Woche).
Erstellen wir diese Dateien:
cd ~/project/comm-lab
echo -e "user1\nuser2\nuser3\nuser4\nuser5" | sort > users_last_week.txt
echo -e "user1\nuser3\nuser5\nuser6\nuser7\nuser8" | sort > users_today.txt
Um die neuen Benutzer zu finden (in users_today.txt, aber nicht in users_last_week.txt):
comm -13 users_last_week.txt users_today.txt
Ausgabe:
user6
user7
user8
Beispiel 2: Finden von entfernten Einträgen
Unter Verwendung derselben Dateien wollen wir herausfinden, welche Benutzer seit der vergangenen Woche entfernt wurden:
comm -23 users_last_week.txt users_today.txt
Ausgabe:
user2
user4
Beispiel 3: Kombinieren von comm mit anderen Befehlen
Der comm-Befehl kann mit anderen Befehlen kombiniert werden, um komplexere Operationen auszuführen. Beispielsweise möchten wir zählen, wie viele gemeinsame Befehle in unseren ursprünglichen Dateien vorhanden sind:
comm -12 commands1.txt commands2.txt | wc -l
Dies leitet die gemeinsamen Zeilen an den wc -l-Befehl weiter, der die Anzahl der Zeilen zählt.
Ausgabe:
5
Dies zeigt an, dass es 5 Befehle gibt, die in beiden Dateien gemeinsam sind.
Beispiel 4: Verwenden von comm mit unsortierten Dateien
Der comm-Befehl erfordert sortierte Eingabedateien. Wenn Sie ihn mit unsortierten Dateien verwenden, erhalten Sie möglicherweise falsche Ergebnisse. Zeigen wir dies auf:
echo -e "cat\nls\npwd\ncd" > unsorted1.txt
echo -e "ls\ncat\ngrep\npwd" > unsorted2.txt
Wenn wir versuchen, comm direkt zu verwenden:
comm unsorted1.txt unsorted2.txt
Die Ausgabe kann irreführend sein, da die Dateien nicht sortiert sind. Der richtige Ansatz besteht darin, die Dateien zuerst zu sortieren:
comm <(sort unsorted1.txt) <(sort unsorted2.txt)
Dies verwendet die Prozesssubstitution, um die Dateien vor dem Vergleich on-the-fly zu sortieren. Sie sollten ein korrekt formatiertes Ergebnis mit den richtigen Spalten sehen.
Diese Beispiele zeigen die Vielseitigkeit des comm-Befehls zum Vergleichen von Textdateien in verschiedenen Szenarien, wie z. B. das Verfolgen von Änderungen, das Finden von Unterschieden und das Filtern von Daten.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie den comm-Befehl in Linux verwenden können, um Textdateien zu vergleichen und Unterschiede zwischen ihnen zu identifizieren. Hier ist eine Zusammenfassung dessen, was Sie erreicht haben:
- Erstellt sortierte Textdateien für den Vergleich mithilfe grundlegender Linux-Befehle
- Verwendet den grundlegenden
comm-Befehl, um zwei Dateien zu vergleichen und sein dreispaltiges Ausgabeformat zu verstehen - Angewandt Spaltenausblendungsoptionen (
-1,-2,-3), um spezifische Informationen zu extrahieren:- Zeilen, die nur in der ersten Datei vorkommen
- Zeilen, die nur in der zweiten Datei vorkommen
- Zeilen, die in beiden Dateien gemeinsam sind
- Vergleichsergebnisse in separate Dateien gespeichert, um sie später zu referenzieren
- Praktische Beispiele für die Verwendung von
commin realen Szenarien untersucht:- Finden neuer Einträge in aktualisierten Listen
- Identifizieren von entfernten Einträgen
- Kombinieren von
commmit anderen Befehlen für komplexere Operationen - Angemessenes Umgang mit unsortierten Dateien
Der comm-Befehl ist ein leistungsstarkes Werkzeug für den Vergleich von Textdateien in Linux. Er ermöglicht es Systemadministratoren, Entwicklern und Datenanalysten, effizient Unterschiede und Ähnlichkeiten zwischen Dateien zu identifizieren, was für Aufgaben wie die Konfigurationsverwaltung, die Versionskontrolle und die Datenanalyse unerlässlich ist.
Das Verständnis, wie man comm und seine Optionen effektiv verwendet, wird Ihre Produktivität erhöhen, wenn Sie in der Linux-Befehlszeilenumgebung mit Textdateien arbeiten.



