Cómo dividir un archivo grande en varios archivos pequeños usando bash
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 p>
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 p>
2000 en total
Como puede ver, el paralelismo de GNU es en realidad el canal MÁS paralelo.