Linux join-Befehl: Dateien zusammenführen

LinuxBeginner
Jetzt üben

Einführung

In diesem Praktikum lernen Sie, wie Sie den join-Befehl unter Linux einsetzen, um Daten aus verschiedenen Dateien zusammenzuführen. Wir simulieren ein Szenario, in dem Sie in der Personalabteilung eines Unternehmens arbeiten und Mitarbeiterinformationen aus unterschiedlichen Datenbanken kombinieren müssen. Diese praktische Übung demonstriert die Leistungsfähigkeit und Flexibilität des join-Befehls für Aufgaben der Datenverarbeitung.

Die Datendateien verstehen

Beginnen wir damit, den Inhalt unserer Mitarbeiterdateien zu untersuchen. Wir haben zwei Dateien: employees.txt und salaries.txt.

Wechseln Sie zunächst in das Projektverzeichnis:

cd /home/labex/project

Dieser Befehl ändert Ihr aktuelles Arbeitsverzeichnis zu /home/labex/project. Alle folgenden Operationen werden in diesem Verzeichnis ausgeführt.

Schauen wir uns nun den Inhalt von employees.txt an:

cat employees.txt

Der Befehl cat zeigt den Dateiinhalt an. Sie sollten eine Ausgabe ähnlich dieser sehen:

1001 John Engineering
1002 Sarah Marketing
1003 Mike Sales
1004 Emily HR
1005 David Finance

Jede Zeile repräsentiert einen Mitarbeiter mit seiner ID, seinem Namen und seiner Abteilung.

Als Nächstes betrachten wir die Datei salaries.txt:

cat salaries.txt

Die Ausgabe sollte wie folgt aussehen:

1001 75000
1002 65000
1003 70000
1004 60000
1005 80000

Diese Datei enthält die Mitarbeiter-IDs und die dazugehörigen Gehälter.

Diese Dateien stellen separate Datenbanken dar, die wir nun mit dem join-Befehl zusammenführen werden.

Grundlegende Join-Operation

Nachdem wir unsere Daten kennen, nutzen wir den join-Befehl, um die Informationen aus beiden Dateien basierend auf der Mitarbeiter-ID zu verschmelzen.

Führen Sie den folgenden Befehl aus:

join employees.txt salaries.txt

Sie sollten folgendes Ergebnis sehen:

1001 John Engineering 75000
1002 Sarah Marketing 65000
1003 Mike Sales 70000
1004 Emily HR 60000
1005 David Finance 80000

Lassen Sie uns analysieren, was passiert ist:

  1. Der join-Befehl hat das erste Feld (die Mitarbeiter-ID) in beiden Dateien verglichen.
  2. Wenn er übereinstimmende IDs gefunden hat, hat er die Zeilen beider Dateien kombiniert.
  3. Die Ausgabe zeigt die Mitarbeiter-ID, gefolgt von allen Feldern aus employees.txt und anschließend alle Felder aus salaries.txt (außer der ID, da diese redundant wäre).

Dies liefert uns eine vollständige Ansicht der Informationen jedes Mitarbeiters in einer einzigen Zeile. Der join-Befehl ist besonders nützlich, wenn Daten über mehrere Dateien verteilt sind, Sie diese aber gemeinsam betrachten oder analysieren möchten.

Die Join-Ausgabe anpassen

Manchmal möchten wir die Reihenfolge der Felder in der Ausgabe ändern oder nur bestimmte Felder einbeziehen. Dies können wir erreichen, indem wir Feldnummern nach dem Befehl angeben.

Probieren Sie diesen Befehl aus:

join -o 1.2,1.3,2.2,1.1 employees.txt salaries.txt

Sie sollten folgendes sehen:

John Engineering 75000 1001
Sarah Marketing 65000 1002
Mike Sales 70000 1003
Emily HR 60000 1004
David Finance 80000 1005

Hier ist die Erklärung der Option -o:

  • -o steht für "output format" (Ausgabeformat).
  • 1.2 bedeutet das zweite Feld aus der ersten Datei (Name).
  • 1.3 bedeutet das dritte Feld aus der ersten Datei (Abteilung).
  • 2.2 bedeutet das zweite Feld aus der zweiten Datei (Gehalt).
  • 1.1 bedeutet das erste Feld aus der ersten Datei (Mitarbeiter-ID).

Dies ermöglicht es uns, die Informationsreihenfolge in unserer Ausgabe individuell zu gestalten. Das ist besonders hilfreich, wenn Sie Daten für ein bestimmtes Berichtsformat umstrukturieren müssen oder nur ausgewählte Felder aus jeder Datei benötigen.

Umgang mit nicht übereinstimmenden Datensätzen

In der Praxis kommt es vor, dass Datensätze in einer Datei existieren, für die es keine Entsprechung in der anderen Datei gibt. Wir simulieren dies, indem wir einen neuen Mitarbeiter hinzufügen, dem noch kein Gehalt zugewiesen wurde.

Fügen Sie diesen Mitarbeiter zu employees.txt hinzu:

echo "1006 Alex IT" >> employees.txt

Der Operator >> hängt die neue Zeile am Ende der Datei an, ohne den bestehenden Inhalt zu überschreiben.

Wenn wir nun unseren einfachen Join-Befehl erneut ausführen:

join employees.txt salaries.txt

Werden Sie bemerken, dass Alex nicht in der Ausgabe erscheint, da es keinen passenden Datensatz in salaries.txt gibt.

Um auch nicht übereinstimmende Datensätze einzubeziehen, können wir die Option -a verwenden:

join -a 1 employees.txt salaries.txt

Nun sollte Alex in der Ausgabe erscheinen:

1001 John Engineering 75000
1002 Sarah Marketing 65000
1003 Mike Sales 70000
1004 Emily HR 60000
1005 David Finance 80000
1006 Alex IT

Die Option -a 1 weist join an, auch die Zeilen aus der ersten Datei (employees.txt) auszugeben, die keinen Partner gefunden haben. Dies ist nützlich, wenn Sie alle Datensätze einer Datei sehen möchten, selbst wenn keine Verknüpfung in der anderen Datei existiert.

Verknüpfung über ein anderes Feld

Bisher haben wir unsere Dateien basierend auf dem ersten Feld (Mitarbeiter-ID) zusammengeführt. Aber was ist, wenn wir die Verknüpfung über ein anderes Feld herstellen wollen? Dies ist sinnvoll, wenn Ihre Dateien anders strukturiert sind oder wenn Sie Daten anhand eines anderen gemeinsamen Attributs zusammenführen müssen.

Erstellen wir eine neue Datei namens departments.txt mit Abteilungskürzeln:

cat << EOF > departments.txt
Engineering ENG
Marketing MKT
Sales SLS
HR HRS
Finance FIN
IT ITS
EOF

Dieser Befehl erstellt die Datei departments.txt mit Abteilungsnamen und den dazugehörigen Codes.

Nun führen wir diese Datei mit unserer employees.txt basierend auf dem Abteilungsnamen zusammen:

join -1 3 -2 1 employees.txt departments.txt

Sie sollten folgendes sehen:

Engineering 1001 John ENG
Marketing 1002 Sarah MKT
Sales 1003 Mike SLS
HR 1004 Emily HRS
Finance 1005 David FIN
IT 1006 Alex ITS

Lassen Sie uns den Befehl aufschlüsseln:

  • -1 3 weist join an, das dritte Feld der ersten Datei (employees.txt) als Verknüpfungsfeld zu verwenden.
  • -2 1 weist an, das erste Feld der zweiten Datei (departments.txt) als Verknüpfungsfeld zu verwenden.

Dies erlaubt uns, Dateien über jedes beliebige gemeinsame Feld zu verbinden, nicht nur über die erste Spalte. Es ist besonders wertvoll, wenn Dateien unterschiedliche Strukturen haben, aber gemeinsame Informationen teilen.

Zusammenfassung

In diesem Praktikum haben Sie gelernt, wie Sie den join-Befehl unter Linux verwenden, um Daten aus mehreren Dateien zusammenzuführen. Wir haben verschiedene Schlüsselfunktionen von join kennengelernt:

  • Grundlegendes Zusammenführen zweier Dateien basierend auf einem gemeinsamen Feld.
  • Anpassen der Ausgabereihenfolge mit der Option -o.
  • Einbeziehen nicht übereinstimmender Datensätze mit der Option -a.
  • Verknüpfen über andere Felder als die erste Spalte mit den Optionen -1 und -2.

Weitere join-Optionen, die in diesem Praktikum nicht behandelt wurden, sind:

  • -t CHAR: Verwendet CHAR als Trennzeichen für Eingabe- und Ausgabefelder.
  • -i: Ignoriert Groß- und Kleinschreibung beim Vergleich der Felder.
  • -e STRING: Ersetzt fehlende Eingabefelder durch STRING.
  • -j FIELD: Entspricht der Angabe von '-1 FIELD -2 FIELD'.
  • -v FILE_NUMBER: Ähnlich wie -a FILE_NUMBER, unterdrückt jedoch die erfolgreich zusammengeführten Zeilen und zeigt nur die unpaarigen an.

Der join-Befehl ist ein mächtiges Werkzeug für die Datenverarbeitung unter Linux, mit dem Sie Informationen aus verschiedenen Quellen effizient kombinieren können. Wenn Sie in Zukunft mit Daten in Ihrer Linux-Umgebung arbeiten, denken Sie daran, dass join eine wertvolle Hilfe beim Zusammenführen und Analysieren von Informationen aus unterschiedlichen Dateien sein kann.