Linux Join Command Tutorial für Anfänger (5 Beispiele)

Manchmal kann es sinnvoll sein, zwei Dateien so zu kombinieren, dass die Ausgabe noch sinnvoller ist. Beispielsweise könnte es eine Datei mit dem Namen der Kontinente und eine weitere Datei mit dem Namen der Länder geben, die sich in diesen Kontinenten befinden, und die Anforderung besteht darin, beide Dateien so zu kombinieren, dass ein Kontinent und das entsprechende Land in der gleichen Zeile erscheinen.

Das ist nur ein Beispiel – es könnte Hunderte von solchen Anwendungsfällen geben. Wenn Sie auf Linux sind und nach einem Tool suchen, das Ihnen in diesen Situationen helfen kann, sollten Sie vielleicht einen Blick darauf werfen. sich[Akk] verbinden, das ein Kommandozeilenprogramm ist. In diesem Tutorial werden wir diesen Befehl anhand einiger leicht verständlicher Beispiele diskutieren.

Bitte beachten Sie, dass alle in diesem Artikel genannten Beispiele auf Ubuntu 16.04 getestet wurden und die von uns verwendete Join-Befehlsversion 8.25 ist.

Linux Join-Befehl

Mit dem Join-Befehl können Sie Zeilen mit zwei Dateien in einem gemeinsamen Feld kombinieren.

join [OPTION]... FILE1 FILE2

Hier ist, was die Man Page über dieses Tool sagt:

For each pair of input lines with identical join fields, write a line to standard output. The default 
join field is the first, delimited by blanks. When FILE1 or FILE2 (not both) is -, read standard input.

Die folgenden Beispiele sollen Ihnen einen guten Eindruck davon vermitteln, wie der Join-Befehl funktioniert.

1. Wie kann man Zeilen von Dateien mit dem Join-Befehl kombinieren?

Lassen Sie uns die grundlegende Verwendung des Join-Befehls verstehen. Angenommen, es gibt zwei Dateien (file1 und file2), die die folgenden Zeilen enthalten:

1. Asia:
2. Africa:
3. Europe:
4. North America:

und

1. India
2. Nigeria
3. The Netherlands
4. The US

Nun können Sie diese beiden Dateien wie folgt kombinieren:

join file1 file2

Hier ist die Ausgabe des obigen Befehls in unserem Fall:

2. Wie kann man den Join-Druck von nicht reparablen Zeilen veranlassen?

Standardmäßig druckt der Join-Befehl nur papierbare Linien. Zum Beispiel, auch wenn file1 ein zusätzliches Feld enthält (Zeilennummer 5):

1. Asia:
2. Africa:
3. Europe:
4. North America:
5. South America:

Das Verbinden von file1 und file2 führt nicht zu einer unterschiedlichen Ausgabe:

Das liegt daran, dass nicht reparierbare Leitungen in der Ausgabe weggelassen werden. Wenn Sie jedoch möchten, können Sie sie trotzdem über die Funktion -a Kommandozeilenoption. Diese Option erfordert, dass Sie eine Dateinummer übergeben, damit das Tool weiß, von welcher Datei Sie sprechen.

In unserem Fall wäre der Befehl beispielsweise:

join file1 file2 -a 1

So können Sie sehen, dass die ungepaarte Zeile aus Datei Nr. 1 (in unserem Fall Datei1) auch in der Ausgabe angezeigt wurde.

Beachten Sie, dass Sie, wenn Sie nur ungepaarte Zeilen drucken möchten (d.h. die gepaarten Zeilen in der Ausgabe unterdrücken), dies mit der Option -v Kommandozeilenoption. Diese Option funktioniert genau so, wie sie funktioniert -a funktioniert.

Hier ist ein Beispiel für die Option -v:

3. Wie kann man benutzerdefinierte Join-Felder bereitstellen?

Wie wir bereits wissen, kombiniert Join Zeilen von Dateien auf einem gemeinsamen Feld, das standardmäßig das erste Feld ist. Wenn Sie möchten, können Sie jedoch für jede Datei ein anderes Feld angeben. Betrachten Sie beispielsweise die folgenden Inhalte in Datei1 und Datei2.

* 1. Asia:
& 2. Africa:
@ 3. Europe:
# 4. North America:
# 1. India
@ 2. Nigeria
& 3. The Netherlands
* 4. The US

Wenn Sie nun möchten, dass das zweite Feld jeder Zeile das gemeinsame Feld für den Join ist, können Sie dies dem Werkzeug mitteilen, indem Sie die Option -1 und -2 Kommandozeilenoptionen. Während erstere die erste Datei repräsentiert, bezieht sich letztere auf die zweite Datei. Diese Optionen erfordern ein numerisches Argument, das sich auf das Verknüpfungsfeld für die entsprechende Datei bezieht.

In unserem Fall ist der Befehl beispielsweise:

join -1 2 -2 2 file1 file2

Und hier ist die Ausgabe dieses Befehls:

Beachten Sie, dass Sie, falls die Position des gemeinsamen Feldes in beiden Dateien gleich ist (wie in dem Beispiel, das wir gerade besprochen haben, wo es 2 ist), den Teil -1[Feld] -2[Feld] im Befehl durch -j[Feld] ersetzen können. In unserem Fall würde der Befehl also zu:

beitreten -j2 file1 file2 file2

4. Wie kann man die Groß-/Kleinschreibung von Join-Operationen unabhängig machen?

Standardmäßig ist die Operation des Join-Befehls case-sensitiv. Betrachten Sie zum Beispiel die folgenden Dateien:

Datei1

A. Asia:
B. Africa:
C. Europe:
D. North America:

Datei2

a. India
b. Nigeria
c. The Netherlands
d. The US

Wenn Sie nun versuchen, diese beiden Dateien mit dem Standard (ersten) gemeinsamen Feld zu verbinden, wird nichts passieren. Das liegt daran, dass der Fall von Feldelementen in beiden Dateien unterschiedlich ist. Um den Join dazu zu bringen, dieses Problem zu ignorieren, verwenden Sie die Option -i Kommandozeilenoption.

Hier ist der Befehl für unseren Fall:

join -i file1 file2

Und der folgende Screenshot zeigt den Befehl in Aktion:

5. Wie kann man erreichen, dass der Join nicht auf sortierte Eingaben prüft?

Standardmäßig prüft der Join-Befehl, ob die gelieferte Eingabe sortiert ist oder nicht, und erstellt Berichte, wenn nicht. Betrachten Sie beispielsweise die folgende Ausgabe, wenn die Informationen in Datei1 nicht sortiert wurden:

Nun, falls Sie diesen Fehler/Warnung beseitigen wollen, können Sie dies mit dem Befehl –nocheck-order Option. Hier ist der gleiche Befehl, aber mit dieser Option aktiviert:

Sie können also sehen, dass der Join-Befehl diesmal nicht nach sortierten Eingaben gesucht hat.

Fazit

Join ist vielleicht kein sehr einfaches Werkzeug, aber sobald Sie sich daran gewöhnt haben, könnte es in manchen Situationen eine enorme Zeitersparnis für Sie bedeuten. Wir haben die meisten der Befehlszeilenoptionen hier behandelt. Probieren Sie diese aus und gehen Sie, sobald Sie fertig sind, für den Rest die Man Page des Befehls durch.

Das könnte dich auch interessieren …