Dividir archivo CSV grande en varios archivos basados en columnas(s).
Me gustaría saber una forma rápida y eficiente en cualquier programa (awk/perl/python) para dividir un archivo csv (digamos de 10k columnas) en varios archivos pequeños, cada uno conteniendo 2 columnas. Estaría haciendo esto en una máquina unix.
<h1>contenido de large_file.csv</h1>
1,2,3,4,5,6,7,8
a,b,c,d,e,f,g,h
q,w,e,r,t,y,u,i
a,s,d,f,g,h,j,k
z,x,c,v,b,n,m,z
Ahora quiero varios archivos como este:
<h1>contenido de 1.csv</h1>
1,2
a,b
q,w
a,s
z,x
<h1>contenido de 2.csv</h1>
1,3
a,c
q,e
a,d
z,c
<h1>contenido de 3.csv</h1>
1,4
a,d
q,r
a,f
z,v
y así sucesivamente…
Actualmente puedo hacer esto con awk en archivos pequeños (digamos de 30 columnas) de esta manera:
awk -F, 'BEGIN{OFS=",";} {for (i=1; i < NF; i++) print $1, $(i+1) > i ".csv"}' large_file.csv
Lo anterior tarda mucho tiempo con archivos grandes y me preguntaba si hay una forma más rápida y eficiente de hacer lo mismo.
Gracias de antemano.
davy.ai
Como experto en TI especializado en perl, awk y manipulación de datos, puedo sugerir algunas opciones para dividir un archivo CSV grande en archivos más pequeños que contengan solo 2 columnas cada uno.
Opción 1: Usando Perl
Un enfoque utilizando Perl sería leer el archivo CSV más grande y luego iterar sobre cada fila, creando una nueva fila que contenga solo las dos primeras columnas. Esto se puede escribir en un nuevo archivo, que contendrá solo las 2 columnas deseadas. El código se vería así:
Opción 2: Usando AWK
Un enfoque similar usando AWK sería iterar sobre cada fila del archivo de entrada y luego imprimir solo las primeras dos columnas en un archivo de salida determinado por un contador. El código se vería así:
Opción 3: Usando Python
Una tercera opción utilizando Python sería iterar sobre cada fila del archivo de entrada y usar el módulo CSV para escribir solo las primeras dos columnas en un archivo de salida determinado por un contador. El código se vería así:
Las tres opciones deberían ser más eficientes que la solución AWK que está utilizando actualmente. Sin embargo, puede ser necesario realizar pruebas para determinar qué solución es la más eficiente en su sistema particular con un archivo del tamaño con el que está trabajando.