27 febrero, 2015

DEBIAN - Dividir un Archivo en Múltiples Archivo - Repitiendo la Primera Linea

En ocasiones se necesita tomar un archivo grande y separarlo en pequeños archivos seimpre repitiendo la cabecera.

Esta es la manera de resolverlo utilzando split, head, tail

Supongamos que tenemos un archivo llamado prueba.csv

Paso 1:  Tomamos a partir de la linea 2 y pasamos al comando split el cual divide en archivos con 500 lineas, colocando como sufijo un consecutivo numérico que comienza por 00, si se obvia -d el sufijo es alfabéttico comenzando por aa

tail -n +2 prueba.csv | split -l 500 -d - prueba_parte_

Paso 2: Por cada archivo generado se toma la primera la linea del archivo original y se concatena al principio

for file in prueba_parte_*
do
    head -n 1 prueba.csv > tmp_file
    cat $file >> tmp_file
    mv -f tmp_file $file    
done

Paso 3: En mi caso la version de split aun no soporta el argumento --additional-suffix que permitiria establecer una extensión

for file in prueba_parte_*
do
    mv -i $file $file.csv
done