La manera más sencilla de combinar multiples CSV

–>

Seguro que en muchas ocasiones habéis tenido que combinar varios ficheros CSV de idéntica estructura pero diferentes datos y habéis recurrido a procesos de ETL sencillos pero tediosos de crear, como múltiples inputs en Kettle o similares. Os voy a dejar aquí un truco muy sencillo para que, con un simple comando fusionemos tantos ficheros CSV como queramos en uno solo.

Elegid una carpeta y volcad en ella todos los ficheros CSV que queréis combinar. Abrid la consola con permisos de administrador, id a la ruta de la carpeta y escribid lo siguiente

automáticamente os creará un fichero, csv_combinados.csv, que será el resultado de la combinación de tantos ficheros como hubierais incluido en el directorio.

 

Sergio Martín
Más de seis años de experiencia gestionando equipos y proyectos de Business Intelligence para diferentes sectores, apasionado de todos los procesos técnicos relacionados con la gestión de la información, el tratamiento de datos y la automatización de procesos

** Microstrategy 9.4 | Pentaho 5 (ETL) | Oracle 11g **

19 comments

  1. Si combine múltiples CSV´s a través del cmd y me genero un CSV de 3.2 gb, ¿existirá algún programa que lo pueda leer y manipular sin problemas?

  2. Hola Martha,

    un fichero CSV de mas de 2gb siempre va a ser algo problemático de manipular con software de escritorio, Notepad, Notepad++ o programas del estilo van a tardar bastante en abrirte el fichero y en guardar los cambios o movimientos que hagas en él.

    Uno de los mejores en esto es Ultraedit [http://www.ultraedit.com], si buscas un poco por la red lo encontrarás sin problema, pruébalo a ver que tal resulta.

    En cualquier caso, yo te recomiendo importarlo en una base de datos SQL cualquiera (MySQL por ejemplo) para poder trabajar de manera óptima con el fichero.

    Saludos 😉

  3. Hola,

    ¿existe la posibilidad de que te ponga cada nuevo csv en una nueva columna o en una nueva hoja? Necesito los datos en paralelo y esta solución es la más cercana por ahora.

    Muchas gracias.

    Saludos

    1. Hola Enrique,

      directamente de esta manera no lo creo. Un fichero CSV no deja de ser un fichero plano y, como tal, no puede tener más que una “hoja” de excel. Si que se me ocurre que, a través de una macro de excel, pudieras conseguir volcar las diferentes columnas de n ficheros CSV en un mismo fichero Excel.

      He googleado un poco y, si dominas algo de python, puedes probar esto

      http://stackoverflow.com/questions/14530748/combine-columns-from-several-csv-files-into-a-single-file

      En el ejemplo combinan varios ficheros csv con columnas en un único fichero csv con las columnas “pegadas” de manera correlativa.

      Si das con ello, soy todo oídos ojos!

      Saludos 😉

  4. Hola Sergio,
    ante todo gracias por compartir!!!
    el único fallo que le encuentro es que al fusionar 4 CSV en mi caso, añade las 4 lineas de “cabeceras” como si fuesen filas de datos cuando realmente no lo son.
    Se te ocurre alguna forma de evitar esa casuística?

    1. Gracias Toni. Si, es un error conocido del proceso. Lo que yo hago es abrir con Notepad++ / Excel y reemplazar toda la fila por nada y luego borrar los registros vacios. Es un poco rollo, pero es rápido de hacer.

      Si nos vamos a un proceso más complejo, podríamos hacer algo así en batch. Abres un notepad y pegas esto

      @echo off
      cd /d “c:\csv”
      set first=true
      setlocal enabledelayedexpansion
      (for %%x in (*.csv) do (
      if !first!==true (
      type “%%x”
      echo.
      set first=false
      ) ELSE (
      more +1 “%%x”
      )
      ))> c:\csv\file\fichero_csv_resultante.csv

      y lo guardas en proceso.bat, por ejemplo.

      En la carpeta C:\csv tienes los ficheros csv y en la carpeta C:\csv\file\ te genera el resultado (para no tener el mismo fichero como parte del bucle de ficheros a combinar).

      Te debería dejar la primera de las cabeceras, pero no el resto.

      Prueba y me dices 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *