Linux-Split- und Join-Befehle sind sehr hilfreich, wenn Sie große Dateien bearbeiten. Dieser Artikel erläutert die Verwendung des Linux-Befehls „Split and Join“ mit anschaulichen Beispielen.
Join- und Split-Befehlssyntax:
join [OPTION]… FILE1 FILE2
split [OPTION]… [INPUT [PREFIX]]
Linux-Split-Befehlsbeispiele
1. Einfaches Split-Beispiel
Hier ist ein einfaches Beispiel für einen Split-Befehl.
$ split split.zip $ ls split.zip xab xad xaf xah xaj xal xan xap xar xat xav xax xaz xbb xbd xbf xbh xbj xbl xbn xaa xac xae xag xai xak xam xao xaq xas xau xaw xay xba xbc xbe xbg xbi xbk xbm xbo
Wir sehen also, dass die Datei split.zip in kleinere Dateien mit x** als Dateinamen aufgeteilt wurde. Wobei ** das zweistellige Suffix ist, das standardmäßig hinzugefügt wird. Außerdem enthält jede x**-Datei standardmäßig 1000 Zeilen.
$ wc -l * 40947 split.zip 1000 xaa 1000 xab 1000 xac 1000 xad 1000 xae 1000 xaf 1000 xag 1000 xah 1000 xai ... ... ...
Die obige Ausgabe bestätigt also, dass standardmäßig jede x**-Datei 1000 Zeilen enthält.
2.Ändern Sie die Suffixlänge mit der Option -a
Wie in Beispiel 1 oben besprochen, ist die Standard-Suffixlänge 2. Dies kann jedoch mit der Option -a geändert werden.
Wie Sie im folgenden Beispiel sehen, wird das Suffix der Länge 5 für die geteilten Dateien verwendet.
$ split -a5 split.zip $ ls split.zip xaaaac xaaaaf xaaaai xaaaal xaaaao xaaaar xaaaau xaaaax xaaaba xaaabd xaaabg xaaabj xaaabm xaaaaa xaaaad xaaaag xaaaaj xaaaam xaaaap xaaaas xaaaav xaaaay xaaabb xaaabe xaaabh xaaabk xaaabn xaaaab xaaaae xaaaah xaaaak xaaaan xaaaaq xaaaat xaaaaw xaaaaz xaaabc xaaabf xaaabi xaaabl xaaabo
Hinweis:Vorhin haben wir auch über andere Dienstprogramme zur Dateibearbeitung gesprochen – tac, rev, paste.
3. Passen Sie die Größe der geteilten Datei mit der Option -b an
Die Größe jeder aufgeteilten Ausgabedatei kann mit der Option -b gesteuert werden.
In diesem Beispiel wurden die Split-Dateien mit einer Größe von 200000 Bytes erstellt.
$ split -b200000 split.zip $ ls -lart total 21084 drwxrwxr-x 3 himanshu himanshu 4096 Sep 26 21:20 .. -rw-rw-r-- 1 himanshu himanshu 10767315 Sep 26 21:21 split.zip -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xad -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xac -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xab -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xaa -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xah -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xag -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xaf -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xae -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xar ... ... ...
4. Geteilte Dateien mit numerischem Suffix mit der Option -d erstellen
Wie in den obigen Beispielen zu sehen, hat die Ausgabe das Format x**, wobei ** Alphabete sind. Sie können dies mit der Option -d in Zahl ändern.
Hier ist ein Beispiel. Dies hat ein numerisches Suffix in den geteilten Dateien.
$ split -d split.zip $ ls split.zip x01 x03 x05 x07 x09 x11 x13 x15 x17 x19 x21 x23 x25 x27 x29 x31 x33 x35 x37 x39 x00 x02 x04 x06 x08 x10 x12 x14 x16 x18 x20 x22 x24 x26 x28 x30 x32 x34 x36 x38 x40
5. Passen Sie die Anzahl der Split Chunks mit der Option -C
anUm die Anzahl der Chunks zu steuern, verwenden Sie die Option -C.
In diesem Beispiel werden 50 Blöcke aufgeteilter Dateien erstellt.
$ split -n50 split.zip $ ls split.zip xac xaf xai xal xao xar xau xax xba xbd xbg xbj xbm xbp xbs xbv xaa xad xag xaj xam xap xas xav xay xbb xbe xbh xbk xbn xbq xbt xbw xab xae xah xak xan xaq xat xaw xaz xbc xbf xbi xbl xbo xbr xbu xbx
6. Vermeiden Sie Chunks der Größe Null mit der Option -e
Während Sie eine relativ kleine Datei in eine große Anzahl von Chunks aufteilen, ist es gut, null große Chunks zu vermeiden, da sie keinen Mehrwert bringen. Dies kann mit der Option -e erfolgen.
Hier ist ein Beispiel:
$ split -n50 testfile $ ls -lart x* -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xag -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xaf -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xae -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xad -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xac -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xab -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xaa -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xbx -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xbw -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xbv ... ... ...
Wir sehen also, dass in der obigen Ausgabe viele Chunks der Größe Null erzeugt wurden. Jetzt können wir die Option -e verwenden und die Ergebnisse sehen:
$ split -n50 -e testfile $ ls split.zip testfile xaa xab xac xad xae xaf $ ls -lart x* -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xaf -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xae -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xad -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xac -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xab -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xaa
Wir sehen also, dass in der obigen Ausgabe kein Chunk der Größe Null erzeugt wurde.
7. Passen Sie die Anzahl der Zeilen mit der Option -l an
Die Anzahl der Zeilen pro Ausgabe-Split-Datei kann mit der Option -l angepasst werden.
Wie im folgenden Beispiel zu sehen ist, werden aufgeteilte Dateien mit 20000 Zeilen erstellt.
$ split -l20000 split.zip $ ls split.zip testfile xaa xab xac $ wc -l x* 20000 xaa 20000 xab 947 xac 40947 total
Erhalten Sie detaillierte Informationen mit der Option –verbose
Um jedes Mal eine Diagnosemeldung zu erhalten, wenn eine neue Split-Datei geöffnet wird, verwenden Sie die Option –verbose wie unten gezeigt.
$ split -l20000 --verbose split.zip creating file `xaa' creating file `xab' creating file `xac'
Linux-Join-Befehlsbeispiele
8. Einfaches Join-Beispiel
Der Join-Befehl arbeitet mit dem ersten Feld der beiden Dateien (als Eingabe bereitgestellt), indem die ersten Felder abgeglichen werden.
Hier ist ein Beispiel:
$ cat testfile1 1 India 2 US 3 Ireland 4 UK 5 Canada $ cat testfile2 1 NewDelhi 2 Washington 3 Dublin 4 London 5 Toronto $ join testfile1 testfile2 1 India NewDelhi 2 US Washington 3 Ireland Dublin 4 UK London 5 Canada Toronto
Wir sehen also, dass eine Datei mit Ländern mit einer anderen Datei mit Hauptstädten auf der Grundlage des ersten Felds verknüpft wurde.
9. Join funktioniert auf Sortierte Liste
Wenn eine der beiden Dateien, die dem Join-Befehl übergeben werden, nicht sortiert ist, wird eine Warnung in der Ausgabe angezeigt und dieser bestimmte Eintrag wird nicht verbunden.
Da die Eingabedatei in diesem Beispiel nicht sortiert ist, wird eine Warn-/Fehlermeldung angezeigt.
$ cat testfile1 1 India 2 US 3 Ireland 5 Canada 4 UK $ cat testfile2 1 NewDelhi 2 Washington 3 Dublin 4 London 5 Toronto $ join testfile1 testfile2 1 India NewDelhi 2 US Washington 3 Ireland Dublin join: testfile1:5: is not sorted: 4 UK 5 Canada Toronto
10. Groß-/Kleinschreibung mit Option -i ignorieren
Beim Vergleichen von Feldern kann der Unterschied zwischen Groß- und Kleinschreibung mit der Option -i wie unten gezeigt ignoriert werden.
$ cat testfile1 a India b US c Ireland d UK e Canada $ cat testfile2 a NewDelhi B Washington c Dublin d London e Toronto $ join testfile1 testfile2 a India NewDelhi c Ireland Dublin d UK London e Canada Toronto $ join -i testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto
11. Überprüfen Sie, ob die Eingabe sortiert ist, indem Sie die Option –check-order
verwendenHier ist ein Beispiel. Da testfile1 gegen Ende unsortiert war, wurde ein Fehler in der Ausgabe erzeugt.
$ cat testfile1 a India b US c Ireland d UK f Australia e Canada $ cat testfile2 a NewDelhi b Washington c Dublin d London e Toronto $ join --check-order testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London join: testfile1:6: is not sorted: e Canada
12. Prüfen Sie die Sortierung nicht mit der Option –nocheck-order
Dies ist das Gegenteil des vorherigen Beispiels. In diesem Beispiel wird keine Prüfung auf Sortierung durchgeführt und es wird keine Fehlermeldung angezeigt.
$ join --nocheck-order testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London
13. Nicht koppelbare Leitungen mit der Option -a ausgeben
Wenn beide Eingabedateien nicht eins zu eins zugeordnet werden können, können wir über die Option -a[FILENUM] die Zeilen haben, die beim Vergleich nicht gepaart werden können. FILENUM ist die Dateinummer (1 oder 2).
Im folgenden Beispiel sehen wir, dass die Verwendung von -a1 die letzte Zeile in Testdatei1 (unten fett markiert) erzeugt hat, die kein Paar in Testdatei2 hatte.
$ cat testfile1 a India b US c Ireland d UK e Canada f Australia $ cat testfile2 a NewDelhi b Washington c Dublin d London e Toronto $ join testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto $ join -a1 testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto f Australia
14. Nur ungepaarte Leitungen mit der Option -v drucken
Im obigen Beispiel wurden in der Ausgabe sowohl gepaarte als auch ungepaarte Linien erzeugt. Wenn jedoch nur eine ungepaarte Ausgabe gewünscht wird, verwenden Sie die Option -v wie unten gezeigt.
$ join -v1 testfile1 testfile2 f Australia
15. Join basierend auf unterschiedlichen Spalten aus beiden Dateien mit der Option -1 und -2
Standardmäßig werden die ersten Spalten in beiden Dateien zum Vergleichen vor dem Verbinden verwendet. Sie können dieses Verhalten mit den Optionen -1 und -2 ändern.
Im folgenden Beispiel wurde die erste Spalte von testfile1 mit der zweiten Spalte von testfile2 verglichen, um die Ausgabe des Join-Befehls zu erzeugen.
$ cat testfile1 a India b US c Ireland d UK e Canada $ cat testfile2 NewDelhi a Washington b Dublin c London d Toronto e $ join -1 1 -2 2 testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto