Connect with us

Wie man

Verwendung des Join-Befehls unter Linux

So verwenden Sie Curl zum Herunterladen von Dateien über die Linux-Befehlszeile

Fatmawati Achmad Zaenuri / Shutterstock

Wenn Sie Daten aus zwei Textdateien zusammenführen möchten, indem Sie ein gemeinsames Feld abgleichen, können Sie Linux verwenden join Befehl. Es verleiht Ihren statischen Datendateien einen Hauch von Dynamik. Wir zeigen Ihnen, wie man es benutzt.

Übereinstimmende Daten über Dateien hinweg

Daten sind König. Unternehmen, Unternehmen und Haushalte laufen gleichermaßen darauf. Aber Daten, die in verschiedenen Dateien gespeichert und von verschiedenen Personen gesammelt werden, sind ein Schmerz. Neben dem Wissen, welche Dateien geöffnet werden müssen, um die gewünschten Informationen zu finden, unterscheiden sich Layout und Format der Dateien wahrscheinlich.

Sie müssen sich auch mit den administrativen Problemen befassen, welche Dateien aktualisiert werden müssen, welche gesichert werden müssen, welche Legacy-Dateien sind und welche archiviert werden können.

Wenn Sie Ihre Daten konsolidieren oder eine Analyse für einen gesamten Datensatz durchführen müssen, tritt ein zusätzliches Problem auf. Wie rationalisieren Sie die Daten in den verschiedenen Dateien, bevor Sie das tun können, was Sie damit tun müssen? Wie nähern Sie sich der Datenaufbereitungsphase?

Die gute Nachricht ist, wenn die Dateien mindestens ein gemeinsames Datenelement gemeinsam haben, Linux join Befehl kann Sie aus dem Sumpf ziehen.

Die Datendateien

Alle Daten, die wir verwenden, um die Verwendung der zu demonstrieren join Der Befehl ist fiktiv und beginnt mit den folgenden zwei Dateien:

cat file-1.txt
cat file-2.txt

Das Folgende ist der Inhalt von file-1.txt::

1 Adore Varian avarian0@newyorker.com Female 192.57.150.231
2 Nancee Merrell nmerrell1@ted.com Female 22.198.121.181
3 Herta Friett hfriett2@dagondesign.com Female 33.167.32.89
4 Torie Venmore tvenmore3@gmpg.org Female 251.9.204.115
5 Deni Sealeaf dsealeaf4@nps.gov Female 210.53.81.212
6 Fidel Bezley fbezley5@lulu.com Male 72.173.218.75
7 Ulrikaumeko Standen ustanden6@geocities.jp Female 4.204.0.237
8 Odell Jursch ojursch7@utexas.edu Male 1.138.85.117

Wir haben eine Reihe von nummerierten Zeilen, und jede Zeile enthält alle folgenden Informationen:

  • Eine Zahl
  • Ein Vorname
  • Ein Familienname
  • Eine E-Mail Adresse
  • Das Geschlecht der Person
  • Eine IP-Adresse

Das Folgende ist der Inhalt von file-2.txt::

1 Varian avarian0@newyorker.com Female Western New York $535,304.73
2 Merrell nmerrell1@ted.com Female Finger Lakes $309,033.10
3 Friett hfriett2@dagondesign.com Female Southern Tier $461,664.44
4 Venmore tvenmore3@gmpg.org Female Central New York $175,818.02
5 Sealeaf dsealeaf4@nps.gov Female North Country $126,690.15
6 Bezley fbezley5@lulu.com Male Mohawk Valley $366,733.78
7 Standen ustanden6@geocities.jp Female Capital District $674,634.93
8 Jursch ojursch7@utexas.edu Male Hudson Valley $663,821.09

Jede Zeile in file-2.txt enthält folgende Informationen:

  • Eine Zahl
  • Ein Familienname
  • Eine E-Mail Adresse
  • Das Geschlecht der Person
  • Eine Region von New York
  • Ein Dollarwert

Das join Der Befehl funktioniert mit „Feldern“, was in diesem Zusammenhang einen Textabschnitt bedeutet, der von Leerzeichen, dem Beginn einer Zeile oder dem Ende einer Zeile umgeben ist. Zum join Um Zeilen zwischen den beiden Dateien abzugleichen, muss jede Zeile ein gemeinsames Feld enthalten.

Daher können wir ein Feld nur dann abgleichen, wenn es in beiden Dateien angezeigt wird. Die IP-Adresse wird nur in einer Datei angezeigt, das ist also nicht gut. Der Vorname erscheint nur in einer Datei, daher können wir ihn auch nicht verwenden. Der Nachname ist in beiden Dateien enthalten, aber es wäre eine schlechte Wahl, da verschiedene Personen den gleichen Nachnamen haben.

Sie können die Daten auch nicht mit den männlichen und weiblichen Einträgen verknüpfen, da sie zu vage sind. Die Regionen New York und die Dollarwerte werden ebenfalls nur in einer Datei angezeigt.

Wir können die E-Mail-Adresse jedoch verwenden, da sie in beiden Dateien vorhanden ist und jeweils für eine Person eindeutig ist. Ein kurzer Blick durch die Dateien bestätigt auch, dass die Zeilen in jeder Datei derselben Person entsprechen, sodass wir die Zeilennummern als übereinstimmendes Feld verwenden können (wir werden später ein anderes Feld verwenden).

Beachten Sie, dass die beiden Dateien eine unterschiedliche Anzahl von Feldern enthalten, was in Ordnung ist – wir können es erkennen join welches Feld aus jeder Datei verwendet werden soll.

Achten Sie jedoch auf Felder wie die Regionen von New York. In einer durch Leerzeichen getrennten Datei sieht jedes Wort im Namen einer Region wie ein Feld aus. Da einige Regionen Namen mit zwei oder drei Wörtern haben, haben Sie tatsächlich eine andere Anzahl von Feldern in derselben Datei. Dies ist in Ordnung, solange Sie mit Feldern übereinstimmen, die in der Zeile vor den Regionen von New York angezeigt werden.

Der Join-Befehl

Zunächst muss das Feld, mit dem Sie übereinstimmen möchten, sortiert werden. Wir haben in beiden Dateien aufsteigende Zahlen, daher erfüllen wir diese Kriterien. Standardmäßig, join verwendet das erste Feld in einer Datei, was wir wollen. Ein weiterer sinnvoller Standard ist der join erwartet, dass die Feldtrennzeichen Leerzeichen sind. Wir haben das wieder, damit wir weitermachen und loslegen können join.

Da wir alle Standardeinstellungen verwenden, ist unser Befehl einfach:

join file-1.txt file-2.txt

join betrachtet die Dateien als „Datei eins“ und „Datei zwei“ in der Reihenfolge, in der sie in der Befehlszeile aufgeführt sind.

Die Ausgabe ist wie folgt:

1 Adore Varian avarian0@newyorker.com Female 192.57.150.231 Varian avarian0@newyorker.com Female Western New York $535,304.73
2 Nancee Merrell nmerrell1@ted.com Female 22.198.121.181 Merrell nmerrell1@ted.com Female Finger Lakes $309,033.10
3 Herta Friett hfriett2@dagondesign.com Female 33.167.32.89 Friett hfriett2@dagondesign.com Female Southern Tier $461,664.44
4 Torie Venmore tvenmore3@gmpg.org Female 251.9.204.115 Venmore tvenmore3@gmpg.org Female Central New York $175,818.02
5 Deni Sealeaf dsealeaf4@nps.gov Female 210.53.81.212 Sealeaf dsealeaf4@nps.gov Female North Country $126,690.15
6 Fidel Bezley fbezley5@lulu.com Male 72.173.218.75 Bezley fbezley5@lulu.com Male Mohawk Valley $366,733.78
7 Ulrikaumeko Standen ustanden6@geocities.jp Female 4.204.0.237 Standen ustanden6@geocities.jp Female Capital District $674,634.93
8 Odell Jursch ojursch7@utexas.edu Male 1.138.85.117 Jursch ojursch7@utexas.edu Male Hudson Valley $663,821.09

Die Ausgabe wird folgendermaßen formatiert: Das Feld, auf dem die Zeilen abgeglichen wurden, wird zuerst gedruckt, gefolgt von den anderen Feldern aus Datei 1 und dann den Feldern aus Datei 2 ohne Übereinstimmungsfeld.

Unsortierte Felder

Versuchen wir etwas, von dem wir wissen, dass es nicht funktioniert. Wir werden die Zeilen in einer Datei außer Betrieb setzen join kann die Datei nicht korrekt verarbeiten. Die Inhalte von file-3.txt sind die gleichen wie file-2.txt, aber Zeile acht liegt zwischen den Zeilen fünf und sechs.

Das Folgende ist der Inhalt von file-3.txt::

1 Varian avarian0@newyorker.com Female Western New York $535,304.73
2 Merrell nmerrell1@ted.com Female Finger Lakes $309,033.10
3 Friett hfriett2@dagondesign.com Female Southern Tier $461,664.44
4 Venmore tvenmore3@gmpg.org Female Central New York $175,818.02
5 Sealeaf dsealeaf4@nps.gov Female North Country $126,690.15
8 Jursch ojursch7@utexas.edu Male Hudson Valley $663,821.09
6 Bezley fbezley5@lulu.com Male Mohawk Valley $366,733.78
7 Standen ustanden6@geocities.jp Female Capital District $674,634.93

Wir geben den folgenden Befehl ein, um zu versuchen, sich anzumelden file-3.txtzu file-1.txt::

join file-1.txt file-3.txt

join berichtet, dass die siebte Zeile in file-3.txt ist nicht in Betrieb, wird also nicht verarbeitet. Zeile sieben beginnt mit der Nummer sechs, die in einer korrekt sortierten Liste vor acht stehen sollte. Die sechste Zeile in der Datei (die mit „8 Odell“ beginnt) war die letzte verarbeitete, daher sehen wir die Ausgabe dafür.

Du kannst den … benutzen --check-order Option, wenn Sie sehen möchten, ob join ist mit der Sortierreihenfolge einer Datei zufrieden – es wird kein Zusammenführen versucht.

Dazu geben wir Folgendes ein:

join --check-order file-1.txt file-3.txt

join sagt Ihnen im Voraus, dass es ein Problem mit Zeile sieben der Datei geben wird file-3.txt.

Dateien mit fehlenden Zeilen

Im file-4.txtwurde die letzte Zeile entfernt, daher gibt es keine Zeile acht. Der Inhalt ist wie folgt:

1 Varian avarian0@newyorker.com Female Western New York $535,304.73
2 Merrell nmerrell1@ted.com Female Finger Lakes $309,033.10
3 Friett hfriett2@dagondesign.com Female Southern Tier $461,664.44
4 Venmore tvenmore3@gmpg.org Female Central New York $175,818.02
5 Sealeaf dsealeaf4@nps.gov Female North Country $126,690.15
6 Bezley fbezley5@lulu.com Male Mohawk Valley $366,733.78
7 Standen ustanden6@geocities.jp Female Capital District $674,634.93

Wir geben Folgendes ein und überraschenderweise join beschwert sich nicht und verarbeitet alle Zeilen, die es kann:

join file-1.txt file-4.txt

Die Ausgabe listet sieben zusammengeführte Zeilen auf.

Das -a Die Option (nicht paarweise drucken) gibt an join um auch die Zeilen zu drucken, die nicht übereinstimmen konnten.

Hier geben wir den folgenden Befehl ein, um zu sagen join So drucken Sie die Zeilen aus Datei 1, die nicht mit den Zeilen in Datei 2 übereinstimmen können:

join -a 1 file-1.txt file-4.txt

Sieben Zeilen werden abgeglichen, und Zeile acht aus Datei eins wird nicht übereinstimmend gedruckt. Es gibt keine zusammengeführten Informationen, weil file-4.txt enthielt keine Zeile acht, mit der es übereinstimmen konnte. Zumindest wird es jedoch immer noch in der Ausgabe angezeigt, sodass Sie wissen, dass es keine Übereinstimmung gibt file-4.txt.

Wir geben Folgendes ein -v Befehl (Verknüpfte Linien unterdrücken), um alle Linien anzuzeigen, die nicht übereinstimmen:

join -v file-1.txt file-4.txt

Wir sehen, dass Zeile acht die einzige ist, die in Datei zwei nicht übereinstimmt.

Übereinstimmende andere Felder

Lassen Sie uns zwei neue Dateien in einem Feld abgleichen, das nicht die Standardeinstellung ist (Feld eins). Das Folgende ist der Inhalt von Datei-7.txt:

avarian0@newyorker.com Female 192.57.150.231
dsealeaf4@nps.gov Female 210.53.81.212
fbezley5@lulu.com Male 72.173.218.75
hfriett2@dagondesign.com Female 33.167.32.89
nmerrell1@ted.com Female 22.198.121.181
ojursch7@utexas.edu Male 1.138.85.117
tvenmore3@gmpg.org Female 251.9.204.115
ustanden6@geocities.jp Female 4.204.0.237

Und das Folgende ist der Inhalt von Datei-8.txt:

Female avarian0@newyorker.com Western New York $535,304.73
Female dsealeaf4@nps.gov North Country $126,690.15
Male fbezley5@lulu.com Mohawk Valley $366,733.78
Female hfriett2@dagondesign.com Southern Tier $461,664.44
Female nmerrell1@ted.com Finger Lakes $309,033.10
Male ojursch7@utexas.edu Hudson Valley $663,821.09
Female tvenmore3@gmpg.org Central New York $175,818.02
Female ustanden6@geocities.jp Capital District $674,634.93

Das einzig sinnvolle Feld für den Beitritt ist die E-Mail-Adresse, Feld eins in der ersten Datei und Feld zwei in der zweiten. Um dies zu berücksichtigen, können wir die verwenden -1 (Datei ein Feld) und -2 (Datei zwei Feld) Optionen. Wir werden diesen mit einer Nummer folgen, die angibt, welches Feld in jeder Datei zum Verbinden verwendet werden soll.

Wir geben Folgendes ein, um dies zu verdeutlichen join So verwenden Sie das erste Feld in Datei 1 und das zweite in Datei 2:

join -1 1 -2 2 file-7.txt file-8.txt

Die Dateien werden unter der E-Mail-Adresse verknüpft, die als erstes Feld jeder Zeile in der Ausgabe angezeigt wird.

Verwenden verschiedener Feldtrennzeichen

Was ist, wenn Sie Dateien mit Feldern haben, die durch etwas anderes als Leerzeichen getrennt sind?

Die folgenden zwei Dateien sind durch Kommas getrennt – das einzige Leerzeichen befindet sich zwischen den Ortsnamen mit mehreren Wörtern:

cat file-5.txt
cat file-6.txt

Wir können die verwenden -t (Trennzeichen) zu erzählen join welches Zeichen als Feldtrennzeichen verwendet werden soll. In diesem Fall ist es das Komma, daher geben wir den folgenden Befehl ein:

join -t, file-5.txt file-6.txt

Alle Zeilen stimmen überein und die Leerzeichen bleiben in den Ortsnamen erhalten.

Briefkasten ignorieren

Eine andere Datei, file-9.txtist fast identisch mit file-8.txt. Der einzige Unterschied besteht darin, dass einige der E-Mail-Adressen einen Großbuchstaben haben, wie unten gezeigt:

Female avarian0@newyorker.com Western New York $535,304.73
Female dsealeaf4@nps.gov North Country $126,690.15
Male Fbezley5@lulu.com Mohawk Valley $366,733.78
Female hfriett2@dagondesign.com Southern Tier $461,664.44
Female nmerrell1@ted.com Finger Lakes $309,033.10
Male Ojursch7@utexas.edu Hudson Valley $663,821.09
Female tvenmore3@gmpg.org Central New York $175,818.02
Female ustanden6@geocities.jp Capital District $674,634.93

Als wir uns anschlossen file-7.txt und file-8.txt, es hat perfekt funktioniert. Mal sehen, was passiert mit file-7.txt und file-9.txt.

Wir geben den folgenden Befehl ein:

join -1 1 -2 2 file-7.txt file-9.txt

Wir haben nur sechs Zeilen abgeglichen. Die Unterschiede in Groß- und Kleinbuchstaben verhinderten, dass die beiden anderen E-Mail-Adressen verbunden wurden.

Wir können jedoch die verwenden -i (Groß- / Kleinschreibung ignorieren) Option zum Erzwingen join um diese Unterschiede zu ignorieren und Felder abzugleichen, die denselben Text enthalten, unabhängig von der Groß- und Kleinschreibung.

Wir geben den folgenden Befehl ein:

join -1 1 -2 2 -i file-7.txt file-9.txt

Alle acht Zeilen werden abgeglichen und erfolgreich verbunden.

Mischen und Anpassen

Im joinSie haben einen mächtigen Verbündeten, wenn Sie mit einer umständlichen Datenvorbereitung zu kämpfen haben. Möglicherweise müssen Sie die Daten analysieren, oder Sie versuchen, sie in Form zu bringen, um einen Import in ein anderes System durchzuführen.

Egal wie die Situation ist, Sie werden es nicht bereuen join in deiner Ecke!

Continue Reading
Click to comment

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Tendencia