I comandi di divisione e unione di Linux sono molto utili quando si manipolano file di grandi dimensioni. Questo articolo spiega come utilizzare il comando split and join di Linux con esempi descrittivi.
Unisci e dividi la sintassi dei comandi:
unisciti a [OPZIONE]… FILE1 FILE2
dividi [OPZIONE]… [INPUT [PREFIX]]
Esempi di comando di divisione Linux
1. Esempio di divisione di base
Ecco un esempio di base di comando di divisione.
$ 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
Quindi vediamo che il file split.zip è stato suddiviso in file più piccoli con x** come nomi di file. Dove ** è il suffisso di due caratteri aggiunto per impostazione predefinita. Inoltre, per impostazione predefinita, ogni file x** conterrà 1000 righe.
$ wc -l * 40947 split.zip 1000 xaa 1000 xab 1000 xac 1000 xad 1000 xae 1000 xaf 1000 xag 1000 xah 1000 xai ... ... ...
Quindi l'output sopra conferma che per impostazione predefinita ogni file x** contiene 1000 righe.
2.Cambia la lunghezza del suffisso usando l'opzione -a
Come discusso nell'esempio 1 sopra, la lunghezza del suffisso di default è 2. Ma questo può essere cambiato usando -a opzione.
Come puoi vedere nell'esempio seguente, utilizza il suffisso di lunghezza 5 sui file divisi.
$ 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
Nota:in precedenza abbiamo anche discusso di altre utilità di manipolazione dei file:tac, rev, paste.
3.Personalizza la dimensione del file diviso usando l'opzione -b
La dimensione di ogni file diviso di output può essere controllata usando l'opzione -b.
In questo esempio, i file divisi sono stati creati con una dimensione di 200000 byte.
$ 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. Crea file divisi con suffisso numerico usando l'opzione -d
Come visto negli esempi precedenti, l'output ha il formato x** dove ** sono alfabeti. Puoi cambiarlo in numero usando l'opzione -d.
Ecco un esempio. Questo ha un suffisso numerico sui file divisi.
$ 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. Personalizza il numero di blocchi divisi usando l'opzione -C
Per avere il controllo sul numero di blocchi, usa l'opzione -C.
Questo esempio creerà 50 blocchi di file divisi.
$ 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. Evita pezzi di dimensioni zero usando l'opzione -e
Mentre si divide un file relativamente piccolo in un numero elevato di blocchi, è bene evitare blocchi di dimensioni zero poiché non aggiungono alcun valore. Questo può essere fatto usando l'opzione -e.
Ecco un esempio:
$ 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 ... ... ...
Quindi vediamo che molti blocchi di dimensioni zero sono stati prodotti nell'output di cui sopra. Ora, utilizziamo l'opzione -e e vediamo i risultati:
$ 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
Quindi vediamo che nessun blocco di dimensioni zero è stato prodotto nell'output sopra.
7. Personalizza il numero di righe usando l'opzione -l
Il numero di righe per file diviso di output può essere personalizzato utilizzando l'opzione -l.
Come si vede nell'esempio seguente, i file divisi vengono creati con 20000 righe.
$ split -l20000 split.zip $ ls split.zip testfile xaa xab xac $ wc -l x* 20000 xaa 20000 xab 947 xac 40947 total
Ottieni informazioni dettagliate utilizzando l'opzione –verbose
Per ricevere un messaggio diagnostico ogni volta che viene aperto un nuovo file diviso, usa l'opzione –verbose come mostrato di seguito.
$ split -l20000 --verbose split.zip creating file `xaa' creating file `xab' creating file `xac'
Esempi di comandi per unire Linux
8. Esempio di unione di base
Il comando Unisci funziona sul primo campo dei due file (fornito come input) facendo corrispondere i primi campi.
Ecco un esempio :
$ 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
Quindi vediamo che un file contenente i paesi è stato unito a un altro file contenente le maiuscole sulla base del primo campo.
9. Unisciti ai lavori su Elenco ordinato
Se uno qualsiasi dei due file forniti per unire il comando non è ordinato, viene visualizzato un avviso in output e quella voce particolare non è unita.
In questo esempio, poiché il file di input non è ordinato, visualizzerà un messaggio di avviso/errore.
$ 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. Ignora maiuscole/minuscole usando l'opzione -i
Quando si confrontano i campi, la differenza tra maiuscole e minuscole può essere ignorata utilizzando l'opzione -i come mostrato di seguito.
$ 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. Verifica che l'input sia ordinato utilizzando l'opzione –check-order
Ecco un esempio. Poiché testfile1 non è stato ordinato verso la fine, è stato prodotto un errore nell'output.
$ 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. Non controllare l'ordinamento usando l'opzione –nocheck-order
Questo è l'opposto dell'esempio precedente. In questo esempio non viene eseguito alcun controllo dell'ordinamento e non verrà visualizzato alcun messaggio di errore.
$ join --nocheck-order testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London
13. Stampa linee non abbinabili usando -a opzione
Se entrambi i file di input non possono essere mappati uno a uno, tramite l'opzione -a[FILENUM] possiamo avere quelle linee che non possono essere accoppiate durante il confronto. FILENUM è il numero del file (1 o 2).
Nell'esempio seguente, vediamo che l'utilizzo di -a1 ha prodotto l'ultima riga in testfile1 (contrassegnata in grassetto di seguito) che non aveva coppia in testfile2.
$ 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. Stampa solo linee non accoppiate usando l'opzione -v
Nell'esempio precedente sono state prodotte nell'output sia le linee accoppiate che quelle non accoppiate. Ma, se si desidera solo un output non accoppiato, utilizzare l'opzione -v come mostrato di seguito.
$ join -v1 testfile1 testfile2 f Australia
15. Unisci in base a colonne diverse da entrambi i file utilizzando l'opzione -1 e -2
Per impostazione predefinita, le prime colonne in entrambi i file vengono utilizzate per il confronto prima dell'unione. Puoi modificare questo comportamento usando l'opzione -1 e -2.
Nell'esempio seguente, la prima colonna di testfile1 è stata confrontata con la seconda colonna di testfile2 per produrre l'output del comando join.
$ 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