Los comandos de división y unión de Linux son muy útiles cuando se manipulan archivos de gran tamaño. Este artículo explica cómo usar el comando dividir y unir de Linux con ejemplos descriptivos.
Sintaxis del comando Unir y dividir:
unir [OPCIÓN]… ARCHIVO1 ARCHIVO2
dividir [OPCIÓN]… [ENTRAR [PREFIX]]
Ejemplos de comandos divididos de Linux
1. Ejemplo básico de división
Aquí hay un ejemplo básico de comando dividido.
$ 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
Entonces vemos que el archivo split.zip se dividió en archivos más pequeños con x** como nombres de archivo. Donde ** es el sufijo de dos caracteres que se agrega de forma predeterminada. Además, de forma predeterminada, cada archivo x** contendría 1000 líneas.
$ wc -l * 40947 split.zip 1000 xaa 1000 xab 1000 xac 1000 xad 1000 xae 1000 xaf 1000 xag 1000 xah 1000 xai ... ... ...
Entonces, el resultado anterior confirma que, de manera predeterminada, cada archivo x** contiene 1000 líneas.
2. Cambie la longitud del sufijo usando la opción -a
Como se discutió en el ejemplo 1 anterior, la longitud del sufijo predeterminado es 2. Pero esto se puede cambiar usando la opción -a.
Como puede ver en el siguiente ejemplo, está usando un sufijo de longitud 5 en los archivos divididos.
$ 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:Anteriormente también hablamos sobre otras utilidades de manipulación de archivos:tac, rev, paste.
3.Personalice el tamaño del archivo dividido usando la opción -b
El tamaño de cada archivo dividido de salida se puede controlar con la opción -b.
En este ejemplo, los archivos divididos se crearon con un tamaño de 200 000 bytes.
$ 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. Cree archivos divididos con sufijo numérico usando la opción -d
Como se ve en los ejemplos anteriores, la salida tiene el formato de x** donde ** son alfabetos. Puede cambiar esto a número usando la opción -d.
Aquí hay un ejemplo. Esto tiene un sufijo numérico en los archivos divididos.
$ 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. Personalice el número de fragmentos divididos con la opción -C
Para controlar la cantidad de fragmentos, use la opción -C.
Este ejemplo creará 50 fragmentos de archivos divididos.
$ 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. Evite los fragmentos de tamaño cero con la opción -e
Al dividir un archivo relativamente pequeño en una gran cantidad de fragmentos, es bueno evitar los fragmentos de tamaño cero, ya que no agregan ningún valor. Esto se puede hacer usando la opción -e.
Aquí hay un ejemplo:
$ 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 ... ... ...
Entonces vemos que se produjeron muchos fragmentos de tamaño cero en la salida anterior. Ahora, usemos la opción -e y veamos los resultados:
$ 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
Entonces vemos que no se produjo ningún fragmento de tamaño cero en la salida anterior.
7. Personalice el número de líneas con la opción -l
El número de líneas por archivo dividido de salida se puede personalizar con la opción -l.
Como se ve en el ejemplo a continuación, los archivos divididos se crean con 20000 líneas.
$ split -l20000 split.zip $ ls split.zip testfile xaa xab xac $ wc -l x* 20000 xaa 20000 xab 947 xac 40947 total
Obtenga información detallada usando la opción detallada
Para obtener un mensaje de diagnóstico cada vez que se abre un nuevo archivo dividido, use la opción detallada como se muestra a continuación.
$ split -l20000 --verbose split.zip creating file `xaa' creating file `xab' creating file `xac'
Ejemplos de comandos de unión de Linux
8. Ejemplo básico de unión
El comando Unir funciona en el primer campo de los dos archivos (suministrados como entrada) haciendo coincidir los primeros campos.
Aquí hay un ejemplo:
$ 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
Entonces vemos que un archivo que contiene países se unió a otro archivo que contiene capitales sobre la base del primer campo.
9. Unirse a trabajos en lista ordenada
Si alguno de los dos archivos proporcionados para unir el comando no está ordenado, aparece una advertencia en la salida y esa entrada en particular no está unida.
En este ejemplo, dado que el archivo de entrada no está ordenado, mostrará un mensaje de advertencia/error.
$ 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. Ignorar caso usando la opción -i
Al comparar campos, la diferencia entre mayúsculas y minúsculas se puede ignorar usando la opción -i como se muestra a continuación.
$ 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. Verifique que la entrada esté ordenada usando la opción –check-order
Aquí hay un ejemplo. Dado que testfile1 no se clasificó hacia el final, se produjo un error en la salida.
$ 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. No verifique la clasificación usando la opción –nocheck-order
Esto es lo contrario del ejemplo anterior. En este ejemplo, no se realiza ninguna comprobación de ordenación y no se mostrará ningún mensaje de error.
$ join --nocheck-order testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London
13. Imprima líneas no emparejables usando la opción -a
Si ambos archivos de entrada no se pueden asignar uno a uno, a través de la opción -a[FILENUM] podemos tener esas líneas que no se pueden emparejar durante la comparación. FILENUM es el número de archivo (1 o 2).
En el siguiente ejemplo, vemos que el uso de -a1 produjo la última línea en testfile1 (marcada en negrita a continuación) que no tenía par en 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. Imprima solo líneas no emparejadas usando la opción -v
En el ejemplo anterior, se generaron líneas emparejadas y no emparejadas en la salida. Pero, si solo se desea una salida no emparejada, use la opción -v como se muestra a continuación.
$ join -v1 testfile1 testfile2 f Australia
15. Únase en función de diferentes columnas de ambos archivos usando la opción -1 y -2
De forma predeterminada, las primeras columnas de ambos archivos se utilizan para comparar antes de unirse. Puede cambiar este comportamiento usando las opciones -1 y -2.
En el siguiente ejemplo, la primera columna de testfile1 se comparó con la segunda columna de testfile2 para producir la salida del comando de combinación.
$ 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