una subir studio importar datos como archivos archivo abrir linux unix csv

subir - ¿Cómo puedo analizar archivos CSV en la línea de comandos de Linux?



subir archivo de excel ar (12)

Como lo sugiere @Jonathan en un comentario, hay un módulo para python que proporciona la herramienta de línea de comandos csvfilter. Funciona como corte, pero maneja correctamente las columnas de CSV:

csvfilter -f 1,3,5 in.csv > out.csv

Si tiene python (y debería), puede instalarlo simplemente así:

pip install csvfilter

Más información en https://github.com/codeinthehole/csvfilter/

¿Cómo puedo analizar archivos CSV en la línea de comandos de Linux?

Para hacer cosas como:

csvparse -c 2,5,6 filename

para extraer campos de las columnas 2, 5 y 6 de todas las filas.

Debería poder manejar el formato de archivo csv: http://tools.ietf.org/html/rfc4180 que significa que se deben citar los campos y escaparse de las comillas internas, según corresponda , para una fila de ejemplo con 3 campos:

field1,"field, number ""2"", has inner quotes and a comma",field3

de modo que si solicito el campo 2 para la fila anterior, obtengo:

field, number "2", has inner quotes and a comma

Aprecio que haya numerosas soluciones, perl, awk (etc.) para este problema, pero me gustaría una herramienta de línea de comandos bash nativa que no requiera que invoque otro entorno de scripting o escriba ningún código adicional (!).


Encontré que csvkit es útil, está basado en el módulo python csv y tiene bastantes opciones para analizar archivos csv complejos.

Aunque parece ser un poco lento. Estoy obteniendo 4MB / s (con 100% de CPU) al extraer un campo de una csv de 7GB con 5 columnas.

Para extraer la cuarta columna de file.csv

csvcut -c 4 file.csv


Esto suena como un trabajo para awk.

Lo más probable es que necesite escribir su propio script para sus necesidades específicas, pero this sitio tiene un diálogo sobre cómo hacerlo.

También puede usar la utilidad de corte para quitar los campos.

Algo como:

cut -f 2,5,6 -d , filename

donde el argumento -f es el campo que desea y -d es el delímetro que desea. Luego puede ordenar estos resultados, encontrar los únicos, o usar cualquier otra utilidad bash. Aquí hay un video genial sobre trabajar con archivos CSV desde la línea de comando. Solo alrededor de un minuto, echaría un vistazo.

Sin embargo, supongo que podría agrupar la utilidad de corte con awk y no querer usarla. En realidad, no sé a qué se refiere exactamente con el comando nativo bash, así que todavía lo sugeriré.


Mi editor de flujo CSV FOSS CSVfix hace exactamente lo que quieres. Hay un instalador binario para Windows y una versión compilable (a través de un archivo MAKE) para UNIX / Linux.


Mi reacción instintiva sería escribir un envoltorio de scripts alrededor del módulo csv de Python (si aún no existe tal cosa).


Para un envoltorio súper ligero alrededor del módulo csv de Python, puedes mirar a pluckr .


Pruebe crush-tools , son excelentes para manipular datos delimitados. Suena exactamente lo que estás buscando.


Script Perl (requiere texto :: CSV_XS):

#!/usr/bin/perl use strict; use warnings; use Getopt::Long; my @opt_columns; GetOptions("column=i@" => /@opt_columns) or die "Failed parsing options/n"; die "Must give at least one --column/n" if int(@opt_columns) == 0; @opt_columns = map { $_-1 } @opt_columns; # convert 1-based to 0-based use Text::CSV_XS; my $csv = Text::CSV_XS->new ( { binary => 1 } ); open(my $stdin, "<-") or die "Couldn''t open stdin/n"; open(my $stdout, ">-") or die "Couldn''t open stdout/n"; while (my $row = $csv->getline($stdin)) { my @nrow = @{$row}[@opt_columns]; $csv->print($stdout, /@nrow); print "/n"; }

Ponlo en un archivo csvcut.pl .

Ejemplo de tomar solo las columnas 3 y 4:

cat foo.csv | ./csvcut.pl --c 3 --c 4

Esto solo citará columnas que necesiten cotizaciones, por lo que si una columna de entrada tiene "Barra" (con comillas) saldrá de Barra (sin comillas).


También escribí una de estas herramientas (solo UNIX) llamada csvprintf . También puede convertir a XML de forma online.


Un google rápido revela un script awk que parece manejar archivos csv.


csvtool es realmente bueno. Disponible en Debian / Ubuntu ( apt-get install csvtool ). Ejemplo:

csvtool namedcol Account,Cost input.csv > output.csv

Consulte la página del manual de CSVTool para obtener sugerencias de uso.


ffe es otra gran herramienta. Requiere que cree un archivo de configuración para la mayoría de las tareas no triviales. Lo bueno es que es muy flexible y puede manejar todo tipo de estructura, lógica y formato que otras herramientas no pueden.

Me gusta usar csvtool para trabajos rápidos y usar ffe para trabajos complejos o trabajos que requieren frecuentes repeticiones.