Trabajo con archivos CSV y, a veces, necesito verificar rápidamente el contenido de una fila o columna desde la línea de comandos. En muchos casos cut
, head
, tail
, y amigos harán el trabajo; sin embargo, cortar no puede lidiar fácilmente con situaciones como
"this, is the first entry", this is the second, 34.5
Aquí, la primera coma es parte del primer campo, pero cut -d, -f1
no está de acuerdo. Antes de escribir una solución yo mismo, me preguntaba si alguien sabía de una buena herramienta que ya existe para este trabajo. Tendría que, como mínimo, poder manejar el ejemplo anterior y devolver una columna de un archivo con formato CSV. Otras características deseables incluyen la capacidad de seleccionar columnas en función de los nombres de columna dados en la primera fila, soporte para otros estilos de cotización y soporte para archivos separados por tabuladores.
Si no conoce dicha herramienta, pero tiene sugerencias sobre la implementación de dicho programa en Bash, Perl o Python, u otros lenguajes de script comunes, no me importaría tales sugerencias.
fuente
Probablemente llego un poco tarde, pero hay otra herramienta que vale la pena mencionar: csvkit
http://csvkit.readthedocs.org/
Tiene muchas herramientas de línea de comandos que pueden:
cut
,grep
,sort
y otros, pero CSV-conscientes,fuente
Suena como un trabajo para Perl
Text::CSV
.Consulte la documentación sobre cómo manejar los nombres de columna. El separador y el estilo de comillas se pueden ajustar con parámetros para
new
. Ver tambiénText::CSV::Separator
para adivinar separadores.fuente
(t)csh
ese comando funcionaría bien en el indicador de su shell. Siempre puede unir esas líneas si lo desea en una sola línea. Newline es generalmente como el espacio en la sintaxis de Perl como en C.-e
crea un bucle implícito).He encontrado csvfix, una herramienta de línea de comandos que funciona bien. Sin embargo, deberá hacerlo usted mismo:
http://neilb.bitbucket.org/csvfix
Hace todas las cosas que esperaría, ordenar / seleccionar columnas, dividir / fusionar y muchas que no le gustaría generar inserciones SQL a partir de datos CSV y datos CSV diferentes.
fuente
Si desea usar la línea de comandos (y no crear un programa completo para hacer el trabajo), le gustaría usar filas , un proyecto en el que estoy trabajando: es una interfaz de línea de comandos para datos tabulares pero también una biblioteca de Python para usar en sus programas. Con la interfaz de línea de comandos, puede imprimir bastante cualquier dato en CSV, XLS, XLSX, HTML o cualquier otro formato tabular admitido por la biblioteca con un comando simple:
Si
myfile.csv
es así:Luego, las filas imprimirán el contenido de una manera hermosa, como esta:
Instalando
Si usted es un desarrollador de Python y ya ha
pip
instalado en su máquina, simplemente ejecute dentro de un virtualenv o consudo
:Si estás usando Debian:
Otras características interesantes
Convertir formatos
Puede convertir entre cualquier formato compatible:
Consulta
Sí, puede usar SQL en un archivo CSV:
También es posible convertir la salida de la consulta a un archivo en lugar de stdout utilizando el
--output
parámetroComo una biblioteca de Python
También puedes en tus programas de Python:
¡Espero que lo disfrutes!
fuente
R no es mi lenguaje de programación favorito, pero es bueno para cosas como esta. Si su archivo csv es
Dentro del tipo de intérprete R
Con respecto a sus otras solicitudes, para "la capacidad de seleccionar columnas en función de los nombres de columna dados en la primera fila", vea
Para "soporte para otros estilos
quote
de citas " vea el argumento de read.csv (y funciones relacionadas). Para "soporte para archivos separados por tabulaciones", vea elsep
argumento de read.csv (establecidosep
en '\ t').Para más información, mire la ayuda online.
fuente
Rscript
(parte de la distribución base R) o el paquete de complementoslittler
. Puedes hacer#!/usr/bin/env Rscript
o similar.Solía csvtool una vez y me salvó un montón de tiempo y problemas. Llamable desde la cáscara.
http://caml.inria.fr/cgi-bin/hump.en.cgi?contrib=447
fuente
Miller es otra buena herramienta para manipular datos basados en nombres, incluido CSV (con encabezados). Para extraer la primera columna de un archivo CSV, sin importar su nombre, haría algo como
fuente
awk
, pero muy consciente de DSV.O bien, podrías probar algo de magia awk . Sin embargo, no soy un buen usuario awk y no puedo confirmar que esto funcione correctamente, y cómo hacerlo.
fuente
Eche un vistazo también a GNU Recutils y crush-tools .
(a través de http://www.reddit.com/r/commandline/comments/mfcu9/anyone_using_gnu_recutils_is_it_outdatedsuperceded/ )
fuente
Para usar python desde la línea de comandos, puede consultar pythonpy ( https://github.com/Russell91/pythonpy ):
fuente
pruebe "csvtool" este paquete es una práctica herramienta de línea de comandos para manejar archivos CSV
fuente
cissy también realizará el procesamiento csv de línea de comandos. Está escrito en C (pequeño / ligero) con paquetes rpm y deb disponibles para la mayoría de las distribuciones.
Usando el ejemplo:
o
o
fuente
También hay una biblioteca de Curry para leer / escribir archivos en formato CSV : CSV .
fuente
El github repo Structured Text Tools tiene una lista útil de herramientas de línea de comandos de Linux relevantes. En particular, la sección de valores separados del delimitador enumera varias herramientas compatibles con CSV que admiten directamente las operaciones solicitadas.
fuente
Recomiendo xsv: un kit de herramientas de línea de comandos CSV rápido escrito en Rust ( Github ).
Escrito por el autor de Ripgrep .
Aparece en Cómo hicimos nuestro procesamiento CSV 142 veces más rápido ( hilo de Reddit ).
fuente
Una de las mejores herramientas es Miller ( http://johnkerl.org/miller/doc/index.html ). Es como awk, sed, cut, join y sort para datos indexados por nombre como CSV, TSV y JSON tabular.
Por ejemplo
te dio
Si quieres un TSV
te da (es posible eliminar el encabezado)
Si desea la primera y tercera columna, cambie su orden
te dio
fuente
Si desea una herramienta visual / interactiva en la terminal, recomiendo VisiData de todo corazón.
Tiene tablas de frecuencia (mostradas arriba), pivote, fusión, diagramas de dispersión, filtrado / computación usando Python, y más.
Puede pasar archivos csv así
vd hello.csv
Hay opciones específicas csv:
--csv-dialect
,--csv-delimiter
,--csv-quotechar
, y--csv-skipinitialspace
para afinar la manipulación de archivos CSV.fuente
Una solución awk
fuente