Necesito fusionar múltiples archivos .CSV (usando el cat
comando) pero sin copiar el encabezado de cada archivo.
¿Cuál es la mejor manera de lograr esta tarea?
Necesitará más que el cat
comando, como se describe aquí :
Digamos que tiene 3 archivos CSV: file1.csv
, file2.csv
, y file3.csv
y desea unirse a ellos para bigfile.csv
y su cabecera es siempre (sólo) la primera línea, a continuación, el uso
bien (mantener el encabezado del primer archivo "file1.csv"):
cat file1.csv <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
o (elimine el encabezado de todos los archivos cuyos nombres comienzan con "archivo"):
awk 'FNR > 1' file*.csv > bigfile.csv
cat <(cat file1.csv) <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
tail -n+2
,tail +2
no funcionaríaEstoy de acuerdo con la respuesta principal, pero sugiero extenderla con el siguiente escenario (ya que no puedo comentar):
Si desea que el archivo de salida contenga encabezado (una vez), el script correcto es:
awk '(NR == 1) || (FNR > 1)' file*.csv > bigfile.csv
FNR representa el número del registro procesado en un solo archivo. Y NR lo representa globalmente, por lo que se acepta la primera línea y el resto se ignora como antes.
fuente
También puede usar un comando de grupo (
{ ; }
) en lugar de la sustitución de proceso (<()
):También funciona con terminaciones 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 generan advertencias en algunos entornos.
fuente
Necesario para concatenar dos CSV grandes con columnas idénticas en CSV más grandes para la secuencia de comandos de fragmentación (los datos no tienen identificadores únicos).
Primero sacó el encabezado del segundo csv
A continuación, concatenado a través de lo siguiente
fuente
El uso de la secuencia de comandos anterior dio como resultado un archivo similar a este:
Para convertirlo en un CSV adecuado, con una línea de encabezado y todos los valores relevantes, empleé el siguiente
sed
encantamiento ...sed -ie "/^$/d;/^==>/d" bigfile.csv
fuente
Solución más fácil si tiene una tonelada de archivos:
Simplemente regrese para editar el archivo grande y agregue el encabezado nuevamente.
fuente
awk 'FNR > 1' file*.csv > bigfile.csv
? ¡No es!file