Linux / Comando csplit: dividir archivos por líneas o patrones

csplit divide el archivo no por un tamaño fijo, sino en la posición donde aparece el número de línea o un patrón coincidente. Es útil cuando se desea separar el texto con límites de sección.

Si se especifican el punto de división y el prefijo del nombre del archivo, se pueden crear fragmentos que se ajusten a la estructura del documento. El nombre del archivo de salida predeterminado se genera como xx00, por lo que se recomienda usar un directorio dedicado y un prefijo para que no coincida con otros archivos de trabajo.

Sintaxis básica

csplit [opciones] archivo_entrada patrón ...

La implementación instalada y las opciones pueden variar según la distribución. Verifique la descripción de man csplit en el sistema actual.

Ejemplos de uso

División por número de línea

Los ejemplos con notes.txt, report.txt y book.txt presuponen archivos existentes con las líneas o los encabezados indicados; el bloque de sample.txt posterior crea sus propios datos. Para dividir en la línea 11, prepare al menos 11 líneas: el primer fragmento contiene las 10 primeras y el segundo empieza en la 11.

csplit -f part- notes.txt 11

División por patrón

Se inicia un nuevo fragmento desde la línea en la que aparece el patrón.

csplit -f section- report.txt '/^Chapter /'

División repetida a partir de múltiples coincidencias

En GNU csplit, la repetición {*} aplica el patrón anterior tantas veces como sea posible; mantenga las comillas para que el shell no lo interprete.

csplit -f chapter- book.txt '/^Chapter /' '{*}'

Ver archivos divididos por patrón

csplit divide la entrada en la ubicación donde comienza la línea del patrón especificado. -s oculta la cantidad de bytes de cada fragmento que se muestra de forma predeterminada.

printf 'one\nTWO\ntwo\n' > sample.txt
csplit -s -f part- sample.txt '/^TWO$/'
cat part-00
cat part-01

Ejemplo de salida al ejecutar dos comandos cat consecutivamente:

one
TWO
two

part-00 contiene one, la línea anterior a la coincidencia; part-01 contiene la línea coincidente TWO y la siguiente, two. Si el patrón no se encuentra, csplit falla y puede eliminar los fragmentos creados, salvo que use -k. La ejecución puede sobrescribir nombres de salida existentes: use un directorio vacío de prueba y un prefijo distinto para cada ejemplo.

Opciones y formatos principales

Opción o formato Descripción
-f prefijo Establece la parte inicial del nombre del archivo de los fragmentos de salida.
-n N Establece el número de dígitos del sufijo numérico.
-s Oculta la salida del tamaño en bytes de cada fragmento.
-z No crea archivos de salida vacíos.
-k Incluso si ocurre un error, se mantienen los fragmentos ya creados.

Precauciones al usar

Si no hay un patrón o si los límites no coinciden con lo esperado, el número y la ubicación de los fragmentos pueden variar. Primero verifique los resultados con una entrada de prueba y no ejecute esto en un directorio donde existan archivos de salida con nombres existentes. A diferencia de split, la regla de división en sí depende del contenido del archivo.

Preguntas frecuentes

¿Debe usarse split o csplit?

Si se desea dividir uniformemente por tamaño o número de líneas, use split; si se desea dividir en un número específico de líneas o patrón de encabezado, csplit es más adecuado.

Documentación oficial

Puede consultar el comportamiento exacto de las opciones y las diferencias de implementación en la documentación oficial relacionada con csplit.