Fusionar varios archivos CSV sin fusionar el encabezado

11

Necesito combinar varios archivos .CSV (usando el comando cat ) pero sin copiar el encabezado de cada archivo.

¿Cuál es la mejor manera de realizar esta tarea?

    
pregunta Dranian 31.01.2013 - 21:40

5 respuestas

21

Necesitará más que el comando cat , como se describe here :

Supongamos que tiene 3 archivos CSV: file1.csv , file2.csv y file3.csv y desea unirlos a bigfile.csv y su encabezado es siempre (solo) la primera línea, luego use

o bien (mantener el encabezado desde el primer archivo):

cat < file1.csv <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv

o (eliminar el encabezado de todos los archivos cuyos nombres comienzan con "archivo"):

awk 'FNR > 1' file*.csv > bigfile.csv
    
respondido por el iolsmit 31.01.2013 - 22:16
5

También puede usar un comando de grupo ( { ; } ) en lugar de la sustitución del proceso ( <() ):

{ head -n1 file1.csv; for f in file*.csv; do tail -n+2 "$f"; done; } > new.csv

También funciona con los finales de línea CRLF siempre que los archivos terminen con una línea vacía ( \r\n ).

POSIX 1003.1-2001 dejó obsoletas las versiones de solo cabeza y cola, y producen advertencias en algunos entornos.

    
respondido por el user495470 12.04.2013 - 12:12
1

Se necesita para concatenar dos CSV grandes con columnas idénticas en un CSV más grande para la secuencia de comandos de fragmentación (los datos no tienen ID únicos).

Primero tomó el encabezado de la segunda CSV

awk 'FNR > 1' file2.csv > file2_noheading.csv

A continuación, concatenado a través de lo siguiente

cat file1.csv file2_noheading.csv > newfile.csv
    
respondido por el mcconnelljk 11.03.2017 - 14:49
0

El uso de la secuencia de comandos anterior dio como resultado un archivo con el siguiente aspecto:

header,of,csv1
contents,of,csv1
==> csv2.csv

contents,of,csv2

Para convertirlo en un CSV adecuado, con una línea de cabecera y todos los valores relevantes, empleé el siguiente sed incantation ... sed -ie "/^$/d;/^==>/d" bigfile.csv

    
respondido por el hd1 29.10.2013 - 19:07
-1

Solución más fácil si tienes un montón de archivos:

awk 'FNR > 1' *.csv > merged.csv

Vuelva a editar el archivo grande y agregue el encabezado nuevamente.

    
respondido por el brian 21.03.2017 - 00:51

Lea otras preguntas en las etiquetas