Linux join-Befehl: Dateizusammenführung

LinuxLinuxBeginner
Jetzt üben

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

Einführung

In diesem Lab erfahren Sie, wie Sie den join-Befehl in Linux verwenden, um Daten aus mehreren Dateien zusammenzuführen. Wir simulieren ein Szenario, in dem Sie in der Personalabteilung eines Unternehmens arbeiten und Mitarbeiterinformationen aus verschiedenen Datenbanken zusammenführen müssen. Diese praktische Übung zeigt die Stärke und Flexibilität des join-Befehls für Datenverarbeitungstasks.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/join("File Joining") subgraph Lab Skills linux/cd -.-> lab-219193{{"Linux join-Befehl: Dateizusammenführung"}} linux/join -.-> lab-219193{{"Linux join-Befehl: Dateizusammenführung"}} end

Das Verständnis der Datendateien

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

Zunächst wechseln Sie in das Projektverzeichnis:

cd /home/labex/project

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

Nun lassen Sie uns den Inhalt von employees.txt anzeigen:

cat employees.txt

Der cat-Befehl zeigt den Inhalt der Datei 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 schauen wir uns salaries.txt an:

cat salaries.txt

Die Ausgabe sollte ähnlich sein wie:

1001 75000
1002 65000
1003 70000
1004 60000
1005 80000

Diese Datei enthält die Mitarbeiter-IDs und ihre entsprechenden Gehälter.

Diese Dateien repräsentieren separate Datenbanken, die wir mit dem join-Befehl zusammenführen werden.

Grundlegende Join-Operation

Nachdem wir nun unsere Daten verstanden haben, verwenden wir den join-Befehl, um die Informationen aus beiden Dateien anhand der Mitarbeiter-ID zusammenzuführen.

Führen Sie den folgenden Befehl aus:

join employees.txt salaries.txt

Sie sollten eine Ausgabe wie diese sehen:

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

Schauen wir uns an, was passiert ist:

  1. Der join-Befehl hat das erste Feld (Mitarbeiter-ID) in beiden Dateien betrachtet.
  2. Wenn er übereinstimmende IDs gefunden hat, hat er die Zeilen aus beiden Dateien zusammengeführt.
  3. Die Ausgabe zeigt zunächst die Mitarbeiter-ID, gefolgt von allen Feldern aus employees.txt und dann von allen Feldern aus salaries.txt (außer der ID, die redundant wäre).

Dadurch erhalten wir in einer einzigen Zeile eine vollständige Übersicht über die Informationen jedes Mitarbeiters. Der join-Befehl ist besonders nützlich, wenn Sie Daten in mehreren Dateien aufgeteilt haben, diese aber zusammen betrachten oder analysieren möchten.

Anpassen der Join-Ausgabe

Manchmal möchten wir möglicherweise die Reihenfolge der Felder in unserer Ausgabe ändern oder nur bestimmte Felder einschließen. Dies können wir tun, indem wir nach dem Join-Befehl die Feldnummern angeben.

Versuchen Sie diesen Befehl:

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

Lassen Sie uns die -o-Option analysieren:

  • -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 Reihenfolge der Informationen in unserer Ausgabe anzupassen. Dies ist besonders nützlich, wenn Sie Daten für ein bestimmtes Berichtsformat neu anordnen müssen oder wenn Sie nur bestimmte Felder aus jeder Datei benötigen.

Umgang mit unübereinstimmenden Datensätzen

In realen Szenarien können Sie Datensätze in einer Datei haben, die keine entsprechenden Übereinstimmungen in der anderen Datei aufweisen. Simulieren wir 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.

Nun, wenn wir unseren grundlegenden Join-Befehl ausführen:

join employees.txt salaries.txt

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

Um unübereinstimmende Datensätze einzuschließen, können wir die -a-Option verwenden:

join -a 1 employees.txt salaries.txt

Jetzt sollten Sie Alex in der Ausgabe sehen:

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

Die -a 1-Option teilt join mit, unparierbare Zeilen aus der ersten Datei (employees.txt) einzuschließen. Dies ist nützlich, wenn Sie alle Datensätze aus einer Datei sehen möchten, auch wenn sie keine Übereinstimmungen in der anderen Datei haben.

Joinen anhand eines anderen Feldes

Bisher haben wir unsere Dateien anhand des ersten Feldes (Mitarbeiter-ID) zusammengeführt. Aber was, wenn wir anhand eines anderen Feldes joinen möchten? Dies kann nützlich sein, wenn Ihre Dateien anders organisiert sind oder wenn Sie Daten anhand eines anderen gemeinsamen Attributs als einer ID zusammenführen müssen.

Erstellen wir eine neue Datei namens departments.txt mit Abteilungscodes:

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

Dieser Befehl erstellt eine neue Datei departments.txt mit Abteilungsnamen und ihren entsprechenden Codes.

Nun, lassen Sie uns diese Datei mit unserer employees.txt-Datei anhand des Abteilungsnamens zusammenführen:

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

  • -1 3 teilt join mit, das dritte Feld aus der ersten Datei (employees.txt) als Join-Feld zu verwenden
  • -2 1 teilt es mit, das erste Feld aus der zweiten Datei (departments.txt) als Join-Feld zu verwenden

Dies ermöglicht es uns, Dateien anhand eines beliebigen gemeinsamen Feldes zusammenzuführen, nicht nur anhand des ersten Feldes. Dies ist besonders nützlich, wenn Ihre Dateien unterschiedliche Strukturen haben, aber einige gemeinsame Informationen aufweisen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den join-Befehl in Linux verwenden können, um Daten aus mehreren Dateien zusammenzuführen. Wir haben mehrere wichtige Funktionen von join untersucht:

  • Grundlegende Zusammenführung von zwei Dateien anhand eines gemeinsamen Feldes
  • Anpassen der Ausgabe-Reihenfolge mit der -o-Option
  • Einbeziehen von unübereinstimmenden Datensätzen mit der -a-Option
  • Zusammenführen anhand von Feldern, die nicht die erste Spalte sind, mit den -1- und -2-Optionen

Zusätzliche join-Optionen, die in diesem Lab nicht behandelt wurden, umfassen:

  • -t CHAR: Verwenden Sie CHAR als Eingabe- und Ausgabe-Feldtrenner
  • -i: Ignorieren Sie Unterschiede in der Groß- und Kleinschreibung beim Vergleichen von Feldern
  • -e STRING: Ersetzen Sie fehlende Eingabefelder durch STRING
  • -j FIELD: Entspricht '-1 FIELD -2 FIELD'
  • -v FILE_NUMBER: Wie -a FILE_NUMBER, aber unterdrückt die zusammengeführten Ausgabereihen

Der join-Befehl ist ein leistungsstarkes Werkzeug für die Datenverarbeitung in Linux und ermöglicht es Ihnen, Informationen aus mehreren Quellen effizient zusammenzuführen. Wenn Sie weiterhin mit Daten in Ihrer Linux-Umgebung arbeiten, denken Sie daran, dass join ein wertvolles Mittel zum Zusammenführen und Analysieren von Informationen aus verschiedenen Dateien sein kann.

Ressourcen