GNU/Linux >> Tutoriales Linux >  >> Linux

¿Dividir archivo por número de líneas, incluido el encabezado en cada una?

Necesito dividir un .txt archivo en otros más pequeños que contengan 100 líneas cada uno, incluido el encabezado. No sé si esto es relevante, pero el archivo original está delimitado así:

COLUMN1 | COLUMN2 | COLUMN3
1 | 2 | 3
4 | 5 | 6
7 | 8 | 9

Necesito que todos los archivos generados a partir de esta división tengan la línea de encabezado. Además, deben generarse o moverse a otro directorio y seguir un patrón de nombre, como file_01.txt , file_02.txt , etc.

Respuesta aceptada:

Con gnu split podría guardar el encabezado en una variable y luego split comenzando desde la segunda línea, usando el --filter opción para escribir el encabezado primero y luego las 99 líneas para cada pieza y también especificar el directorio de salida (por ejemplo, path to/output dir/ ):

header=$(head -n 1 infile.txt)
export header
tail -n +2 infile.txt | split -l 99 -d --additional-suffix=.txt 
--filter='{ printf %s\n "$header"; cat; } >path to/output dir/$FILE' - file_

esto creará piezas de 100 líneas como

path to/output dir/file_01.txt
path to/output dir/file_02.txt
path to/output dir/file_03.txt
..............................

Linux
  1. ¿Eliminar todos los archivos/directorios excepto un archivo?

  2. ¿Cómo imprimir las líneas número 15 y 25 de cada 50 líneas?

  3. ¿Cómo contar el número de líneas en un archivo después de una coincidencia Grep?

  4. Agregar un encabezado a un archivo delimitado por tabulaciones

  5. Cómo obtener solo el número de líneas de un archivo

Cómo unir varias líneas en una en un archivo en Linux

5 formas de contar el número de líneas en un archivo

¿Escribir en un archivo .txt?

Un comando para crear un directorio y un archivo dentro de él comando de Linux

¿Cómo dividir un archivo de texto en varios archivos *.txt?

Listado de líneas de un solo archivo en DIFF