Linux Befehlszeilenvergleich

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/wc("Text Counting") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/TextProcessingGroup -.-> linux/sort("Text Sorting") linux/VersionControlandTextEditorsGroup -.-> linux/comm("Common Line Comparison") subgraph Lab Skills linux/echo -.-> lab-271251{{"Linux Befehlszeilenvergleich"}} linux/cat -.-> lab-271251{{"Linux Befehlszeilenvergleich"}} linux/wc -.-> lab-271251{{"Linux Befehlszeilenvergleich"}} linux/cd -.-> lab-271251{{"Linux Befehlszeilenvergleich"}} linux/mkdir -.-> lab-271251{{"Linux Befehlszeilenvergleich"}} linux/sort -.-> lab-271251{{"Linux Befehlszeilenvergleich"}} linux/comm -.-> lab-271251{{"Linux Befehlszeilenvergleich"}} end

Vorbereitung Ihrer Textdateien

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 -e gibt den Text mit Interpretation der Backslash-Escapes aus (\n erstellt 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.txt umgeleitet (>)

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:

  1. Zeilen, die nur in der ersten Datei vorkommen
  2. Zeilen, die nur in der zweiten Datei vorkommen
  3. 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.txt vorkommen (awk, mkdir, touch)
  • Spalte 2 (ein Tabulator am Anfang): Zeilen, die nur in commands2.txt vorkommen (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.

Ausblenden 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:

  1. Erstellt sortierte Textdateien für den Vergleich mithilfe grundlegender Linux-Befehle
  2. Verwendet den grundlegenden comm-Befehl, um zwei Dateien zu vergleichen und sein dreispaltiges Ausgabeformat zu verstehen
  3. 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
  4. Vergleichsergebnisse in separate Dateien gespeichert, um sie später zu referenzieren
  5. Praktische Beispiele für die Verwendung von comm in realen Szenarien untersucht:
    • Finden neuer Einträge in aktualisierten Listen
    • Identifizieren von entfernten Einträgen
    • Kombinieren von comm mit 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.