¿Cómo puedo dividir un archivo de texto grande en archivos más pequeños con el mismo número de líneas?

Resuelto danben asked hace 14 años • 12 respuestas

Tengo un archivo de texto plano grande (por número de líneas) que me gustaría dividir en archivos más pequeños, también por número de líneas. Entonces, si mi archivo tiene alrededor de 2 millones de líneas, me gustaría dividirlo en 10 archivos que contengan 200k líneas, o 100 archivos que contengan 20k líneas (más un archivo con el resto; no importa que sea divisible uniformemente).

Podría hacer esto con bastante facilidad en Python, pero me pregunto si hay algún tipo de forma ninja de hacerlo usando las utilidades Bash y Unix (en lugar de realizar bucles y contar/particionar líneas manualmente).

danben avatar Jan 07 '10 05:01 danben
Aceptado

Eche un vistazo al comando de división:

$ split --help
Usage: split [OPTION] [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT
is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes  use numeric suffixes instead of alphabetic
  -l, --lines=NUMBER      put NUMBER lines per output file
      --verbose           print a diagnostic to standard error just
                            before each output file is opened
      --help     display this help and exit
      --version  output version information and exit

Podrías hacer algo como esto:

split -l 200000 filename

que creará archivos cada uno con 200000 líneas llamadas xaa xab xac...

Otra opción, dividir por tamaño del archivo de salida (aún se divide en saltos de línea):

 split -C 20m --numeric-suffixes input_filename output_prefix

Crea archivos como output_prefix01 output_prefix02 output_prefix03 ...cada uno de un tamaño máximo de 20 megabytes.

Mark Byers avatar Jan 06 '2010 22:01 Mark Byers

Utilice el comando dividir :

split -l 200000 mybigfile.txt
Robert Christie avatar Jan 06 '2010 22:01 Robert Christie

Sí, hay un splitcomando. Dividirá un archivo por líneas o bytes.

$ split --help
Usage: split [OPTION]... [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT
is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes  use numeric suffixes instead of alphabetic
  -l, --lines=NUMBER      put NUMBER lines per output file
      --verbose           print a diagnostic just before each
                            output file is opened
      --help     display this help and exit
      --version  output version information and exit

SIZE may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
Dave Kirby avatar Jan 06 '2010 22:01 Dave Kirby

Para dividir un archivo de texto grande en archivos más pequeños de 1000 líneas cada uno:

split <file> -l 1000

Para dividir un archivo binario grande en archivos más pequeños de 10 M cada uno:

split <file> -b 10M

Para consolidar archivos divididos en un solo archivo:

cat x* > <file>

Divida un archivo, cada división tiene 10 líneas (excepto la última división):

split -l 10 filename

Divida un archivo en 5 archivos. El archivo se divide de manera que cada división tenga el mismo tamaño (excepto la última división):

split -n 5 filename

Divida un archivo con 512 bytes en cada división (excepto la última división; use 512k para kilobytes y 512m para megabytes):

split -b 512 filename

Divida un archivo con como máximo 512 bytes en cada división sin dividir líneas:

split -C 512 filename

BuGaU0 avatar Jan 24 '2022 10:01 BuGaU0