2012-10-05 88 views
6

Tengo varios archivos CSV con el mismo encabezado y estoy tratando de combinarlos juntos en Batch y mantener solo un encabezado único. ¿Algunas ideas?Batch Combine CSV Remove Header

+0

¿Hay un archivo en particular que desea mantener la cabecera (es decir: sólo el primer archivo CSV, o sólo la última?) ¿O es que todos los archivos tienen un encabezado idénticos? –

Respuesta

7

Puede usar MORE +1 para dar salida a todas las líneas menos a la 1ra.

>new.csv (
    type file1.csv 
    more +1 file2.csv 
    more +1 file3.csv 
    REM etc. 
) 

Obviamente se puede ajustar el número de líneas a saltar en cada archivo según sea necesario.

Para combinar todos los archivos CSV en la carpeta actual: Editar: modificado para no utilizar csv salida de nueva creación como entrada

@echo off 
setlocal 
set first=1 
>new.csv.tmp (
    for %%F in (*.csv) do (
    if defined first (
     type "%%F" 
     set "first=" 
    ) else more +1 "%%F" 
) 
) 
move /y new.csv.tmp new.csv >nul 

o puede utilizar PARA/F para evitar el procesamiento de nueva creación archivo:

@echo off 
setlocal 
set first=1 
>new.csv (
    for /f "eol=: delims=" %%F in ('dir /b /a-d *.csv') do (
    if defined first (
     type "%%F" 
     set "first=" 
    ) else more +1 "%%F" 
) 
) 

Obviamente esto solo es efectivo si todos los archivos csv comparten el mismo formato.

EDITAR 30/07/2015:Hay algunas limitaciones:

  • caracteres de tabulador se convierte en una cadena de espacios
  • Cada archivo fuente CSV debe tener menos de 64 k líneas
+0

¿Por qué el primer ejemplo está limitado a 64k líneas? –

3

Estaba teniendo problemas con el método de dbenham para combinar todos los archivos CSV en la carpeta actual. Ocasionalmente recogería el CSV resultante y lo incluiría en el conjunto. Lo he modificado para evitar este problema.

@echo off 
setlocal 
set first=1 
set fileName="combinedFiles.csv" 
>%fileName% (
    for %%F in (*.csv) do (
    if not "%%F"==%fileName% (
     if defined first (
     type "%%F" 
     set "first=" 
    ) else more +1 "%%F" 
    ) 
) 
)