Cómo `cortar` (extraer un subconjunto de columnas) un archivo CSV que contiene cadenas entre comillas`

2

Tengo un archivo CSV y quiero descartar un par de columnas. Así que digamos que este es un archivo de muestra:

column a, column b, column c
value  a, value  b, value  c
value  a, "quoted, b", value c

Y ahora digamos que querríamos descartar la columna b, para que el resultado sea:

column a, column c
value  a, value  c
value  a, value c

Si no hubiera la cadena entre comillas "quoated, b" podría hacer esto con cut:

cut -d ',' -f 1,3

Sin embargo, hay esta cadena entre comillas. Simplemente podría cargar el archivo con libreoffice, pero además de ser menos geniales y automatizables, mis archivos tienen varios cientos de MB y algunos incluso superan el número máximo de filas para LibreOffice Calc.

(Nota al margen: Mis archivos reales tienen más de 30 columnas y me gustaría seleccionar entre 5 y 10 columnas de esas. Así que no es como "descartar la última columna")

yankee
fuente

Respuestas:

3

Si puede instalar python y easy_install, entonces también puede instalar csvkit : https://csvkit.readthedocs.io

Y ahora puede ejecutar un comando simple como el siguiente para seleccionar solo las columnas 1 y 3:

csvcut -c 1,3 original_file.csv > new_file.csv

O, otro ejemplo, para QUITAR la segunda columna:

csvcut -C 2 original_file.csv > new_file.csv

..

NOTA:

Solo una palabra de advertencia, su CSV parece inválido . A menos que desee tener un carácter de espacio en sus datos, NO DEBE tener un espacio después de la coma / delimitador. Un carácter de espacio solo será parte de los datos y podría desordenar el texto entre comillas.

¿Cómo se generan estos datos? ¿Se puede generar sin los espacios extra? P.ej. column a,column b,column c

jehad
fuente
No se necesitan PPA en Ubuntu: sudo apt install python3-csvkit.
Pablo Bianchi