Red de conocimiento informático - Material del sitio web - Cómo dividir un archivo grande en varios archivos pequeños usando bash

Cómo dividir un archivo grande en varios archivos pequeños usando bash

1. Si desea dividir el archivo, utilice split:

split -l 500 all all

Divida el archivo en varios archivos, cada archivo tiene 500 líneas. Si desea dividir el archivo en 4 archivos de tamaño similar, utilice el siguiente comando:

split -l $(( $( wc -l < ​​​​all ) / 4 + 1 )) all all

2. Consulte el comando split directamente, debería hacer lo que desea (y más):

$ split --help

Cómo utilizar : dividir [OPCIÓN]...[ENTRADA [PREFIJO]]

Salida de fragmentos de ENTRADA de tamaño fijo a PREFIXaa, PREFIXab,...; el tamaño predeterminado

es 1000 líneas, el valor predeterminado El PREFIJO es "x".

-a, --suffix-length=N Genera un sufijo de longitud N (el valor predeterminado es 2)

--additional-suffix=SUFFIX Añade SUFFIX adicional después del nombre del archivo.

- b, ---bytes=SIZE Agrega TAMAÑO bytes a cada archivo de salida

-C, ---line-bytes=SIZE Agrega como máximo a cada archivo de salida Líneas de TAMAÑO bytes

-d, --numeric- suffix[=FROM] Utilice sufijos numéricos en lugar de sufijos alfabéticos.

DESDE cambia el valor inicial (el valor predeterminado es 0).

-e, --else-empty-files No utilice '-n' para generar archivos de salida vacíos

-filter=COMMAND escribe Shell COMMAND el nombre del archivo es $FILE;

p>

-l, --lines=NUMBER Coloca NUMBER líneas en cada archivo de salida

-n, --number=CHUNKS Genera archivos de salida CHUNKS. Ver más abajo

-u, --unbuffered Copie inmediatamente la entrada a la salida con "-n r/...".

--verbose Imprime diagnósticos antes de abrir cada

archivo de salida

--help Muestra esta ayuda y sale

-- versión Salida información de versión y salida

TAMAÑO es un número entero y una unidad opcional (por ejemplo: 10M es 10*1024*1024). Las unidades

son K, M, G, T, P, E, Z, Y (potencia de 1024) o KB, MB, ... (potencia de 1000). (potencia de 1000).

Los CHUNKS se pueden:

N dividir en N archivos según el tamaño de entrada

K/N genera la K-ésima potencia de N en la salida estándar

l/N se divide en N archivos, pero no divide líneas

l/K/N genera la K-ésima potencia de N en la salida estándar, pero no divide líneas

r /N es como "l", pero usa asignación por turnos

r/K/N es como "l", pero solo genera la K-ésima potencia de N en la salida estándar

3 .Separarse como todos los demás. Como referencia, agregué casi lo que se pidió. Tenga en cuenta que con la línea de comando -n especificada chuck, el archivo numéricamente pequeño* no contiene una división de exactamente 500 líneas.

$ seq 2000 > todos

$ split -n l/4 --numeric-suffixes=1 --suffix-length=1 todos pequeños

$ wc -l pequeño*

583 pequeño1

528 pequeño2

445 pequeño3

444 pequeño4

2000 en total

Alternativamente, puede usar la paralelización GNU:

$ < all paralelo -N500 --pipe --cat cp {} pequeño{#}

$ wc - l pequeño*

500 pequeño1

500 pequeño2

500 pequeño3

500 pequeño4

2000 en total

2000 en total

Como puede ver, el paralelismo de GNU es en realidad el canal MÁS paralelo.