file - txt - ¿Cómo divido un archivo en n no de partes
dividir pdf (4)
Tengo un archivo que continúa con algunos de líneas. Quiero dividir el archivo en n no. De archivos con nombres particulares. No importa cuántas líneas haya en cada archivo. Sólo quiero archivos no.of particulares (digamos 5). Aquí el problema es que el número de líneas en el archivo original sigue cambiando. Así que necesito calcular ninguna de las líneas y luego simplemente dividir los archivos en 5 partes. Si es posible, tenemos que enviar a cada uno de ellos a directorios diferentes.
En Linux, hay un comando de split
,
split --lines=1m /path/to/large/file /path/to/output/file/prefix
Salida de piezas de tamaño fijo de ENTRADA a PREFIXaa, PREFIXab, ...; el tamaño predeterminado es 1000 líneas, y el PREFIX predeterminado es ''x''. Sin ENTRADA, o cuando ENTRADA es -, lea la entrada estándar.
...
-l, --lines = NUMBER coloca NUMBER líneas por archivo de salida
...
Sin embargo, tendría que calcular el tamaño real de las divisiones de antemano.
Puedo pensar en algunas maneras de hacerlo. Que usarías depende mucho de los datos.
Las líneas tienen una longitud fija: encuentre el tamaño del archivo leyendo la entrada del directorio y divídala por la longitud de la línea para obtener el número de líneas. Use esto para determinar cuántas líneas por archivo.
Los archivos solo necesitan tener aproximadamente el mismo número de líneas. De nuevo lea el tamaño del archivo de la entrada del directorio. Lea las primeras N líneas (N debe ser pequeña pero una fracción razonable del archivo) para calcular una longitud de línea promedio. Calcule el número aproximado de líneas según el tamaño del archivo y la longitud de línea promedio pronosticada. Esto supone que la longitud de la línea sigue una distribución normal. Si no es así, ajuste su método para muestrear líneas al azar (utilizando seek () o algo similar). Rebobine el archivo después de que tenga su promedio, luego divídalo según la longitud de línea prevista.
Lea el archivo dos veces. La primera vez cuenta el número de líneas. La segunda vez dividiendo el archivo en las piezas requeridas.
EDITAR : Usar un script de shell (de acuerdo con sus comentarios), la versión aleatoria del # 2 sería difícil a menos que escribiera un pequeño programa para hacer eso por usted. Debería poder usar ls -l
para obtener el tamaño del archivo, wc -l
para contar el número exacto de líneas y head -nNNN | wc -c
head -nNNN | wc -c
para calcular la longitud media de la línea.
Suponiendo que está procesando un archivo de texto, entonces wc -l
para determinar el número total de líneas y split -l
para dividir en un número específico de líneas (total / 5 en su caso). Esto funciona en UNIX / Mac y Windows (si tiene instalado cygwin )
En bash, puede usar el comando dividir para dividirlo en función del número de líneas que desee. Puede usar el comando wc
para averiguar cuántas líneas se desean. Aquí está wc
combinado con split
en una línea.
Por ejemplo, para dividir onepiece.log
en 5 partes
split -l$((`wc -l < onepiece.log`/5)) onepiece.log onepiece.split.log -da 4
Esto creará archivos como onepiece.split.log0000
...
Nota : la división de bash se redondea, por lo que si hay un resto, habrá un archivo de la sexta parte.