Linux-Dateiverbindung

LinuxLinuxBeginner
Jetzt üben

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

Einführung

Dieser Lab (Übungsabschnitt) führt Sie in den join-Befehl unter Linux ein, ein leistungsstarkes Werkzeug, das es Ihnen ermöglicht, Daten aus zwei Dateien anhand eines gemeinsamen Feldes zu kombinieren. Ähnlich wie das Verbinden von Tabellen in einer Datenbank ist dieser Befehl besonders nützlich für Datenverarbeitungs- und Analysetasks in Linux-Umgebungen.

Im Laufe dieses Labs werden Sie lernen, wie Sie den join-Befehl mit verschiedenen Optionen verwenden, um Daten aus getrennten Dateien zusammenzuführen, verschiedene Feldtrennzeichen zu verarbeiten und die grundlegenden Prinzipien von Dateiverbindungsoperationen in Linux zu verstehen. Diese Fähigkeiten werden sich als wertvoll erweisen, wenn Sie mit strukturierten Daten in Textdateien arbeiten, was eine häufige Aufgabe in der Systemadministration und Datenanalyse ist.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Anfänger mit einer Abschlussquote von 100% ist. Es hat eine positive Bewertungsrate von 95% von den Lernenden erhalten.

Grundlagen des Join-Befehls verstehen

In diesem Schritt lernen Sie die grundlegende Syntax und Verwendung des join-Befehls kennen. Der join-Befehl in Linux kombiniert Zeilen aus zwei Dateien anhand eines gemeinsamen Feldes, ähnlich wie das Verbinden von Tabellen in einer Datenbank.

Erstellen wir zunächst zwei Beispieldateien, mit denen wir arbeiten können. Wir erstellen Dateien, die Wetterdaten enthalten - genauer gesagt Daten zu Sturmereignissen und die entsprechenden Windrichtungen.

Zunächst erstellen Sie eine Datei namens storms.txt mit Sturm-IDs und Daten:

echo -e "1:2023-04-01\n2:2023-04-15\n3:2023-05-02" > ~/project/storms.txt

Nun erstellen Sie eine weitere Datei namens winds.txt mit Sturm-IDs und Windrichtungen:

echo -e "1:NW\n2:SE\n3:NE" > ~/project/winds.txt

Untersuchen wir die Inhalte dieser Dateien, um ihre Struktur zu verstehen:

cat ~/project/storms.txt

Sie sollten die folgende Ausgabe sehen:

1:2023-04-01
2:2023-04-15
3:2023-05-02

Nun schauen wir uns die Datei winds.txt an:

cat ~/project/winds.txt

Sie sollten die folgende Ausgabe sehen:

1:NW
2:SE
3:NE

Beachten Sie, dass beide Dateien ein gemeinsames erstes Feld (die Sturm-ID) haben, das zum Verbinden der Dateien verwendet werden kann. Verwenden wir nun den join-Befehl, um diese Dateien anhand dieses gemeinsamen Feldes zu kombinieren:

join -t: ~/project/storms.txt ~/project/winds.txt

Die Option -t: teilt dem join-Befehl mit, dass das Feldtrennzeichen in beiden Dateien ein Doppelpunkt (:) ist. Standardmäßig sucht join nach dem gemeinsamen Feld in der ersten Spalte jeder Datei.

Sie sollten die folgende Ausgabe sehen:

1:2023-04-01:NW
2:2023-04-15:SE
3:2023-05-02:NE

Diese Ausgabe zeigt die kombinierten Daten aus beiden Dateien. Jede Zeile enthält:

  • Die Sturm-ID (das gemeinsame Feld)
  • Das Datum (aus der ersten Datei)
  • Die Windrichtung (aus der zweiten Datei)

Der join-Befehl hat die Zeilen mit derselben Sturm-ID übereinstimmen lassen und sie in einzelnen Zeilen in der Ausgabe kombiniert.

Verbinden von Dateien mit unterschiedlichen Feldtrennzeichen

In realen Szenarien begegnen Sie oft Dateien, die unterschiedliche Zeichen als Feldtrennzeichen verwenden. In diesem Schritt erfahren Sie, wie Sie solche Dateien mithilfe des join-Befehls in Kombination mit zusätzlicher Textverarbeitung verbinden können.

Erstellen wir zwei Dateien mit unterschiedlichen Feldtrennzeichen:

Zunächst erstellen Sie eine Datei namens storms_dash.txt mit Sturm-IDs und Daten, wobei ein Bindestrich (-) als Trennzeichen verwendet wird:

echo -e "1-2023-04-10\n2-2023-04-20\n3-2023-05-05" > ~/project/storms_dash.txt

Als Nächstes erstellen Sie eine weitere Datei namens winds_comma.txt mit Sturm-IDs und Windrichtungen, wobei ein Komma (,) als Trennzeichen verwendet wird:

echo -e "1,NW\n2,SE\n3,NE" > ~/project/winds_comma.txt

Untersuchen wir die Inhalte dieser Dateien:

cat ~/project/storms_dash.txt

Sie sollten Folgendes sehen:

1-2023-04-10
2-2023-04-20
3-2023-05-05

Nun schauen wir uns die Datei winds_comma.txt an:

cat ~/project/winds_comma.txt

Sie sollten Folgendes sehen:

1,NW
2,SE
3,NE

Die Herausforderung besteht darin, dass der join-Befehl erwartet, dass beide Dateien dasselbe Feldtrennzeichen verwenden. Um dieses Problem zu lösen, müssen wir eine der Dateien vorverarbeiten, um das Trennzeichen der anderen Datei zu verwenden. Wir können den tr-Befehl verwenden, um Zeichen zu ersetzen:

join -t- ~/project/storms_dash.txt <(tr ',' '-' < ~/project/winds_comma.txt)

Dieser Befehl führt die folgenden Operationen aus:

  1. tr ',' '-' < ~/project/winds_comma.txt - Konvertiert alle Kommas in Bindestriche im Inhalt der Datei winds_comma.txt
  2. <(...) - Prozesssubstitution, die die Ausgabe des eingeschlossenen Befehls als Datei behandelt
  3. join -t- ~/project/storms_dash.txt - Verbindet die Datei storms_dash.txt mit den transformierten Daten, wobei der Bindestrich (-) als Feldtrennzeichen verwendet wird

Sie sollten die folgende Ausgabe sehen:

1-2023-04-10-NW
2-2023-04-20-SE
3-2023-05-05-NE

Diese Ausgabe zeigt die verbundenen Daten aus beiden Dateien, wobei der Bindestrich (-) als Feldtrennzeichen verwendet wird. Die Prozesssubstitution ist eine leistungsstarke Funktion in bash, die es Ihnen ermöglicht, die Ausgabe eines Befehls als Datei zu behandeln, ohne temporäre Dateien erstellen zu müssen.

Fortgeschrittene Join-Optionen

In realen Datenverarbeitungstasks benötigen Sie oft fortgeschrittene Join-Operationen, wie das Behandeln von unpaaren Daten oder das Auswählen bestimmter Felder. Dieser Schritt führt Sie in diese fortgeschrittenen Optionen des join-Befehls ein.

Erstellen wir zwei komplexere Dateien für unsere Beispiele:

echo -e "1:2023-04-01:Thunderstorm\n2:2023-04-15:Hurricane\n3:2023-05-02:Tornado\n4:2023-05-10:Blizzard" > ~/project/storms_types.txt
echo -e "1:High\n2:Medium\n5:Low" > ~/project/severity.txt

Untersuchen wir die Inhalte dieser Dateien:

cat ~/project/storms_types.txt

Sie sollten Folgendes sehen:

1:2023-04-01:Thunderstorm
2:2023-04-15:Hurricane
3:2023-05-02:Tornado
4:2023-05-10:Blizzard
cat ~/project/severity.txt

Sie sollten Folgendes sehen:

1:High
2:Medium
5:Low

Beachten Sie, dass diese Dateien keine perfekte Übereinstimmung der IDs aufweisen:

  • severity.txt hat einen Eintrag für die Sturm-ID 5, der in storms_types.txt nicht existiert.
  • storms_types.txt hat Einträge für die Sturm-IDs 3 und 4, die in severity.txt nicht existieren.

Standardmäßig gibt join nur Zeilen aus, bei denen das Join-Feld in beiden Dateien übereinstimmt:

join -t: ~/project/storms_types.txt ~/project/severity.txt

Sie sollten Folgendes sehen:

1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium

Nur die Sturm-IDs 1 und 2 erscheinen in der Ausgabe, da sie die einzigen sind, die in beiden Dateien existieren.

Behandeln von unpaaren Zeilen

Um unpaare Zeilen in die Ausgabe aufzunehmen, können Sie die -a-Option verwenden:

join -t: -a 1 -a 2 ~/project/storms_types.txt ~/project/severity.txt

Die Option -a 1 teilt join mit, unpaare Zeilen aus der ersten Datei aufzunehmen, und -a 2 macht dasselbe für die zweite Datei.

Sie sollten Folgendes sehen:

1:2023-04-01:Thunderstorm:High
2:2023-04-15:Hurricane:Medium
3:2023-05-02:Tornado:
4:2023-05-10:Blizzard:
5::Low

Beachten Sie, wie unpaare Zeilen leere Felder haben, wo die Daten aus der anderen Datei wären.

Auswählen bestimmter Felder

Sie können auch bestimmte Felder aus jeder Datei auswählen, um sie in die Ausgabe aufzunehmen, indem Sie die -o-Option verwenden:

join -t: -o 1.1,1.3,2.2 ~/project/storms_types.txt ~/project/severity.txt

Die Option -o 1.1,1.3,2.2 gibt an, welche Felder ausgegeben werden sollen:

  • 1.1: Erstes Feld aus der ersten Datei (Sturm-ID)
  • 1.3: Drittes Feld aus der ersten Datei (Sturmtyp)
  • 2.2: Zweites Feld aus der zweiten Datei (Schweregrad)

Sie sollten Folgendes sehen:

1:Thunderstorm:High
2:Hurricane:Medium

Diese Ausgabe enthält nur die Sturm-ID, den Sturmtyp und den Schweregrad und lässt die Datumsinformationen aus. Dies ist besonders nützlich, wenn Sie mit Dateien arbeiten, die viele Felder haben, aber nur bestimmte Felder in Ihrer Ausgabe benötigen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den join-Befehl in Linux verwenden können, um Daten aus verschiedenen Dateien anhand eines gemeinsamen Feldes zu kombinieren. Dies ist eine essentielle Fähigkeit für die Datenverarbeitung und -analyse in Linux-Umgebungen.

Sie haben den join-Befehl mit verschiedenen Optionen geübt:

  • Die grundlegende Syntax zum Verbinden von Dateien mit demselben Feldtrennzeichen
  • Das Behandeln von Dateien mit unterschiedlichen Feldtrennzeichen mithilfe von Prozesssubstitution und dem tr-Befehl
  • Die Verwendung der -a-Option, um unpaare Zeilen in die Ausgabe aufzunehmen
  • Die Verwendung der -o-Option, um bestimmte Felder aus jeder Datei für die Ausgabe auszuwählen

Der join-Befehl ist besonders nützlich, wenn Sie mit strukturierten Textdaten, Protokolldateien oder in jeder Situation arbeiten, in der Sie Informationen aus verschiedenen Quellen anhand eines gemeinsamen Identifikators kombinieren müssen. Diese Fähigkeit ergänzt andere Linux-Textverarbeitungsbefehle wie grep, sed und awk und bietet Ihnen ein leistungsstarkes Toolkit für die Datenmanipulation in der Kommandozeile.