Necesito fusionar múltiples archivos .CSV (usando el catcomando) pero sin copiar el encabezado de cada archivo.
¿Cuál es la mejor manera de lograr esta tarea?
Necesitará más que el catcomando, como se describe aquí :
Digamos que tiene 3 archivos CSV: file1.csv, file2.csv, y file3.csvy desea unirse a ellos para bigfile.csvy 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.csvtail -n+2,tail +2no 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.csvFNR 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
sedencantamiento ...sed -ie "/^$/d;/^==>/d" bigfile.csvfuente
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