So verwenden Sie den Join-Befehl unter Linux

So verwenden Sie den Join-Befehl unter Linux

How Use Join Command Linux

Eine Terminal-Eingabeaufforderung, die für einen Befehl auf einem Linux-System bereit ist.

Fatmawati Achmad Zaenuri/Shutterstock

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



Abgleichen von Daten in mehreren Dateien

Daten sind König. Konzerne, Unternehmen und Haushalte laufen gleichermaßen darauf. Aber Daten, die in verschiedenen Dateien gespeichert und von verschiedenen Personen zusammengestellt wurden, sind mühsam. Abgesehen davon, dass Sie wissen, welche Dateien geöffnet werden müssen, um die gewünschten Informationen zu finden, unterscheiden sich wahrscheinlich auch das Layout und das Format der Dateien.

Sie müssen sich auch mit administrativen Problemen auseinandersetzen, welche Dateien aktualisiert werden müssen, welche gesichert werden müssen, welche veraltet sind und welche archiviert werden können.

Wenn Sie Ihre Daten konsolidieren oder eine Analyse über einen gesamten Datensatz durchführen müssen, haben Sie außerdem ein zusätzliches Problem. Wie rationalisieren Sie die Daten in den verschiedenen Dateien, bevor Sie das Nötigste damit tun können? Wie gehen Sie die Datenaufbereitungsphase an?

Die gute Nachricht ist, wenn die Dateien mindestens ein gemeinsames Datenelement teilen, das Linux |_+_| Befehl kann Sie aus dem Sumpf ziehen.

Die Datendateien

Alle Daten, die wir verwenden, um die Verwendung von |_+_| . zu demonstrieren Der Befehl ist frei erfunden und beginnt mit den folgenden beiden Dateien:

join join

Das Folgende ist der Inhalt von |_+_|:

joinAnzeige

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-1.txt

Jede Zeile in |_+_| enthält folgende Informationen:

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

Die |_+_| Der Befehl arbeitet mit Feldern, was in diesem Zusammenhang einen Textabschnitt, der von Leerzeichen umgeben ist, den Beginn einer Zeile oder das Ende einer Zeile bedeutet. Für |_+_| 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 vorkommt. Die IP-Adresse erscheint nur in einer Datei, das ist also nicht gut. Der Vorname kommt nur in einer Datei vor, also können wir ihn auch nicht verwenden. Der Nachname ist in beiden Dateien enthalten, aber es wäre eine schlechte Wahl, da verschiedene Personen denselben Nachnamen haben.

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

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

Anzeige

Beachten Sie, dass in den beiden Dateien eine unterschiedliche Anzahl von Feldern vorhanden ist, was in Ordnung ist – wir können |_+_| . erkennen 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 aus zwei oder drei Wörtern haben, haben Sie tatsächlich eine unterschiedliche Anzahl von Feldern in derselben Datei. Dies ist in Ordnung, solange Sie bei Feldern übereinstimmen, die in der Zeile vor den New Yorker Regionen erscheinen.

Das Join-Kommando

Zuerst muss das Feld, das Sie zuordnen möchten, sortiert werden. Wir haben in beiden Dateien aufsteigende Nummern, also erfüllen wir diese Kriterien. Standardmäßig ist |_+_| verwendet das erste Feld in einer Datei, was wir wollen. Eine weitere sinnvolle Vorgabe ist, dass |_+_| erwartet, dass die Feldtrennzeichen Leerzeichen sind. Auch das haben wir, also können wir weitermachen und |_+_| anfeuern.

Da wir alle Standardeinstellungen verwenden, ist unser Befehl einfach:

Steam zeigt das Spiel nicht an
file-2.txt

|_+_| betrachtet die Dateien entsprechend der Reihenfolge, in der sie in der Befehlszeile aufgeführt sind, als Datei eins und Datei zwei.

Die Ausgabe ist wie folgt:

file-2.txt

Die Ausgabe wird folgendermaßen formatiert: Das Feld, auf das die Zeilen abgeglichen wurden, wird zuerst gedruckt, gefolgt von den anderen Feldern aus Datei eins und dann die Felder aus Datei zwei ohne das Match-Feld.

Unsortierte Felder

Versuchen wir etwas, von dem wir wissen, dass es nicht funktioniert. Wir werden die Zeilen in einer Datei nicht in der richtigen Reihenfolge platzieren, also |_+_| kann die Datei nicht richtig verarbeiten. Der Inhalt von |_+_| sind die gleichen wie |_+_|, aber Zeile acht liegt zwischen Zeile fünf und sechs.

Das Folgende ist der Inhalt von |_+_|:

joinAnzeige

Wir geben den folgenden Befehl ein, um zu versuchen, |_+_|an |_+_| anzuschließen:

join

|_+_| meldet, dass die siebte Zeile in |_+_| ist außer Betrieb und wird daher nicht verarbeitet. Zeile sieben ist die, die mit der Zahl sechs beginnt, die in einer richtig sortierten Liste vor acht kommen sollte. Die sechste Zeile in der Datei (die mit 8 Odell beginnt) war die letzte verarbeitete, also sehen wir die Ausgabe dafür.

Sie können die |_+_| Option, wenn Sie sehen möchten, ob |_+_| ist mit der Sortierreihenfolge einer Datei zufrieden – es wird keine Zusammenführung versucht.

Dazu geben wir Folgendes ein:

join

|_+_| sagt Ihnen im Voraus, dass es ein Problem mit Zeile sieben der Datei |_+_| geben wird.

Dateien mit fehlenden Zeilen

In |_+_| wurde die letzte Zeile entfernt, daher gibt es keine Zeile acht. Die Inhalte sind wie folgt:

joinAnzeige

Wir geben Folgendes ein und überraschenderweise |_+_| beschwert sich nicht und verarbeitet alle Zeilen, die er kann:

join

Die Ausgabe listet sieben zusammengeführte Zeilen auf.

Die |_+_| (Druck unpaarbar) Option sagt |_+_| um auch die Zeilen zu drucken, die nicht zugeordnet werden konnten.

Hier geben wir den folgenden Befehl ein, um |_+_| um die Zeilen aus Datei eins zu drucken, die nicht mit Zeilen in Datei zwei abgeglichen werden können:

join

Sieben Zeilen werden abgeglichen und Zeile 8 von Datei 1 wird ohne Abgleich gedruckt. Es gibt keine zusammengeführten Informationen, weil |_+_| enthielt keine Zeile acht, der sie zugeordnet werden könnte. Es erscheint jedoch immer noch in der Ausgabe, sodass Sie wissen, dass es keine Übereinstimmung in |_+_| gibt.

Wir geben Folgendes ein |_+_| (verknüpfte Zeilen unterdrücken) Befehl, um alle Zeilen aufzudecken, die keine Übereinstimmung haben:

join

Wir sehen, dass Zeile acht die einzige ist, die keine Übereinstimmung in Datei zwei hat.

Abgleich mit anderen Feldern

Lassen Sie uns zwei neue Dateien in einem Feld zuordnen, das nicht dem Standard entspricht (Feld eins). Das Folgende ist der Inhalt der Datei-7.txt:

join

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

file-3.txtAnzeige

Das einzig sinnvolle Feld für den Beitritt ist die E-Mail-Adresse, das Feld eins in der ersten Datei und Feld zwei in der zweiten. Um dies zu berücksichtigen, können wir die |_+_| (Datei ein Feld) und |_+_| (Datei zwei Felder) Optionen. Wir folgen diesen mit einer Zahl, die angibt, welches Feld in jeder Datei zum Zusammenführen verwendet werden soll.

Wir geben Folgendes ein, um |_+_| . zu sagen um das erste Feld in Datei eins und das zweite in Datei zwei zu verwenden:

file-2.txt

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

Verwenden verschiedener Halbbildtrennzeichen

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

Die folgenden beiden Dateien sind durch Kommas getrennt – der einzige Leerraum befindet sich zwischen den Ortsnamen, die aus mehreren Wörtern bestehen:

file-3.txt file-3.txt

Anzeige

Wir können die |_+_| . verwenden (Trennzeichen), um |_+_| . zu sagen welches Zeichen als Feldtrennzeichen verwendet werden soll. In diesem Fall ist es das Komma, also geben wir den folgenden Befehl ein:

file-1.txt

Alle Zeilen werden abgeglichen und die Leerzeichen in den Ortsnamen bleiben erhalten.

Groß-/Kleinschreibung ignorieren

Eine andere Datei, |_+_|, ist fast identisch mit |_+_|. Der einzige Unterschied besteht darin, dass einige der E-Mail-Adressen einen Großbuchstaben haben, wie unten gezeigt:

join

Als wir zu |_+_| . kamen und |_+_|, es hat perfekt funktioniert. Mal sehen, was mit |_+_| . passiert und |_+_|.

Wir geben folgenden Befehl ein:

file-3.txt

Wir haben nur sechs Zeilen gematcht. Die Unterschiede in Groß- und Kleinschreibung verhinderten, dass die beiden anderen E-Mail-Adressen zusammengeführt wurden.

Anzeige

Wir können jedoch die |_+_| (Groß-/Kleinschreibung ignorieren) Option zum Erzwingen von |_+_| um diese Unterschiede zu ignorieren und Felder abzugleichen, die den gleichen Text enthalten, unabhängig von der Groß-/Kleinschreibung.

Wir geben folgenden Befehl ein:

--check-order

Alle acht Zeilen werden abgeglichen und erfolgreich verbunden.

Mischen und Anpassen

In |_+_| haben Sie einen mächtigen Verbündeten, wenn Sie mit einer umständlichen Datenaufbereitung kämpfen. Vielleicht müssen Sie die Daten analysieren oder versuchen, sie in Form zu bringen, um einen Import in ein anderes System durchzuführen.

Egal wie die Situation ist, du wirst froh sein, dass du |_+_| . hast in deiner ecke!

Linux-Befehle
Dateien Teer · pv · Katze · tac · chmod · Griff · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · Journalctl · Schwanz · Zustand · ls · fstab · rauswerfen · weniger · chgrp · chown · rev · suchen · Saiten · Typ · umbenennen · Postleitzahl · entpacken · montieren · ummount · Installieren · fdisk · mkfs · rm · rmdir · rsync · df · gpg · wir · Nano · mkdir · von · ln · Patch · Konvertieren · rclon · Fetzen · SRM
Prozesse alias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · beim · Charge · kostenlos · die · dmesg · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · ja · töten · Schlaf · sudo · seine · Zeit · groupadd · Benutzermod · Gruppen · lshw · stilllegen · neu starten · halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzung netstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · Locken · wget · Wer · Wer bin ich · In · iptables · ssh-keygen · ufw

VERBUNDEN: Beste Linux-Laptops für Entwickler und Enthusiasten

WEITER LESEN Profilfoto von Dave McKay Dave McKay
Dave McKay benutzte zum ersten Mal Computer, als Lochstreifen in Mode waren, und programmiert seitdem. Nach über 30 Jahren in der IT-Branche ist er heute hauptberuflich Technologiejournalist. Im Laufe seiner Karriere war er als freiberuflicher Programmierer, Leiter eines internationalen Softwareentwicklungsteams, Projektleiter für IT-Services und zuletzt als Datenschutzbeauftragter tätig. Sein Schreiben wurde von howtogeek.com, cloudavvyit.com, itenterpriser.com und opensource.com veröffentlicht. Dave ist ein Linux-Evangelist und Open-Source-Verfechter.
Vollständige Biografie lesen