Hace unos días me detuve a leer un artículo del blog donde se mostraba como dividir un archivo en Linux desde la terminal con el comando split. La cuestión es que tras indagar un poco, me encontré con el comando csplit, cuyo objetivo es el mismo, dividir archivos.
A pesar de esto existen diferencias entre ambos programas, por lo que en función de la situación en la que nos encontremos, será mejor usar un comando u otro. No voy a explicar cómo se usa el comando split porque ya está explicado, pero si voy a hablar un poco de csplit
.
Como dividir archivos con csplit en Linux.
El uso básico de csplit es:
csplit [OPCIONES]... ARCHIVO PATRON...
Para poder explicar un uso básico de csplit
vamos a suponer que nuestro archivo de ejemplo que queremos dividir tiene el siguiente contenido:
Esto es un ejemplo
en el que vamos a dividir
este fichero en varias partes.
Al mismo tiempo, también
podremos apreciar las diferencias
entre split y csplit a la hora de
dividir archivos
en Linux
El comando que vamos a usar a modo de ejemplo es:
csplit -f parte archivo.txt /dividir/ {*}
En primer lugar nos encontramos con la opción -f parte
que nos sirve para especificar que el prefijo del nombre de los nuevos archivos sea parte
en lugar del prefijo usado por defecto que es xx
.
Después nos encontramos el patrón /dividir/
, que es una expresión regular. En este caso el archivo se dividirá en cada línea en la que se encuentre la palabra "dividir" porque hemos especificado el contador {*}
que significa repetir el patrón tantas veces como sea posible.
Una vez ejecutado el comando anterior veremos que se crean tres archivos.
parte00:
Esto es un ejemplo
parte01:
en el que vamos a dividir
este fichero en varias partes.
Al mismo tiempo, también
podremos apreciar las diferencias
entre split y csplit a la hora de
parte02:
dividir archivos
en Linux
Diferencias entre split y csplit.
Llegados a este punto ya podemos apreciar las diferencias entre el comando split y csplit. Con el primero dividimos en un número específico de partes el archivo.
Con csplit dividiremos en un número de partes pero aplicando un patrón. Csplit está dirigido fundamentalmente al procesamiento de ficheros cuyo contenido es texto plano, aunque no hay límites.
Por último dejo la ayuda del comando csplit que viene bien tenerla a mano para aprender a sacarle provecho a esta herramienta.
terminal@ubuntu:~$ csplit --help
Usage: csplit [OPTION]... FILE PATTERN...
Output pieces of FILE separated by PATTERN(s) to files 'xx00', 'xx01', ...,
and output byte counts of each piece to standard output.
Read standard input if FILE is -
Mandatory arguments to long options are mandatory for short options too.
-b, --suffix-format=FORMAT use sprintf FORMAT instead of %02d
-f, --prefix=PREFIX use PREFIX instead of 'xx'
-k, --keep-files do not remove output files on errors
--suppress-matched suppress the lines matching PATTERN
-n, --digits=DIGITS use specified number of digits instead of 2
-s, --quiet, --silent do not print counts of output file sizes
-z, --elide-empty-files remove empty output files
--help display this help and exit
--version output version information and exit
Each PATTERN may be:
INTEGER copy up to but not including specified line number
/REGEXP/[OFFSET] copy up to but not including a matching line
%REGEXP%[OFFSET] skip to, but not including a matching line
{INTEGER} repeat the previous pattern specified number of times
{*} repeat the previous pattern as many times as possible
A line OFFSET is a required '+' or '-' followed by a positive integer.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/csplit>
or available locally via: info '(coreutils) csplit invocation'