linux - editar - Visor de línea de comandos CSV?
linux easytag (19)
¿Alguien sabe de un visor CSV de línea de comandos para Linux / OS X? Estoy pensando en algo como less
pero que espacia las columnas de una manera más legible. (Me gustaría abrirlo con OpenOffice Calc o Excel, pero eso es demasiado poderoso para solo mirar los datos como necesito). Tener un desplazamiento horizontal y vertical sería genial.
Aquí hay una opción (probablemente también) simple:
sed "s/,//t/g" filename.csv | less
Echa un vistazo a csvkit . Proporciona un conjunto de herramientas que se adhieren a la filosofía de UNIX (lo que significa que son pequeñas, simples, de un solo propósito y se pueden combinar).
Aquí hay un ejemplo que extrae las diez ciudades más pobladas de Alemania de la base de datos gratuita de Maxmind World Cities y muestra el resultado en un formato legible por la consola:
$ csvgrep -e iso-8859-1 -c 1 -m "de" worldcitiespop | csvgrep -c 5 -r "/d+"
| csvsort -r -c 5 -l | csvcut -c 1,2,4,6 | head -n 11 | csvlook
-----------------------------------------------------
| line_number | Country | AccentCity | Population |
-----------------------------------------------------
| 1 | de | Berlin | 3398362 |
| 2 | de | Hamburg | 1733846 |
| 3 | de | Munich | 1246133 |
| 4 | de | Cologne | 968823 |
| 5 | de | Frankfurt | 648034 |
| 6 | de | Dortmund | 594255 |
| 7 | de | Stuttgart | 591688 |
| 8 | de | Düsseldorf | 577139 |
| 9 | de | Essen | 576914 |
| 10 | de | Bremen | 546429 |
-----------------------------------------------------
Csvkit es independiente de la plataforma porque está escrito en Python.
El paquete nodejs tecfu/tty-table se puede instalar globalmente para hacer precisamente esto:
apt-get install nodejs
npm i -g tty-table
cat data.csv | tty-table
También puede manejar corrientes.
Para obtener más información, consulte los documentos para el uso del terminal aquí .
Escribí este csv_view.sh para formatear CSV desde la línea de comandos, esto lee el archivo completo para averiguar el ancho óptimo de cada columna (requiere perl, asume que no hay comas en los campos, también usa menos):
#!/bin/bash
perl -we ''
sub max( @ ) {
my $max = shift;
map { $max = $_ if $_ > $max } @_;
return $max;
}
sub transpose( @ ) {
my @matrix = @_;
my $width = scalar @{ $matrix[ 0 ] };
my $height = scalar @matrix;
return map { my $x = $_; [ map { $matrix[ $_ ][ $x ] } 0 .. $height - 1 ] } 0 .. $width - 1;
}
# Read all lines, as arrays of fields
my @lines = map { s//r?/n$//; [ split /,/ ] } ;
my $widths =
# Build a pack expression based on column lengths
join "",
# For each column get the longest length plus 1
map { ''A'' . ( 1 + max map { length } @$_ ) }
# Get arrays of columns
transpose
@lines
;
# Format all lines with pack
map { print pack( $widths, @$_ ) . "/n" } @lines;
'' $1 | less -NS
Escribí un script, viewtab , en Groovy solo para este propósito. Lo invocas como:
viewtab filename.csv
Básicamente, es una hoja de cálculo súper liviana que puede invocarse desde la línea de comandos, maneja archivos separados por pestañas y CSV, puede leer archivos MUY grandes en los que sobresalen Excel y Numbers, y es muy rápido. No es una línea de comandos en el sentido de ser solo de texto, pero es independiente de la plataforma y probablemente se ajuste a la factura de muchas personas que buscan una solución al problema de inspeccionar rápidamente muchos o grandes archivos CSV mientras trabajan en un entorno de línea de comandos. .
El script y cómo instalarlo se describen aquí:
Hay una breve secuencia de comandos en python: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py
Solo descarga y coloca en tu camino. El uso es como
csv2ascii.py [options] csv-file-path
Convierta el archivo csv en csv-file-path
a ascii form y devuelva el resultado en stdout. Si csv-file-path
= ''-'' entonces lee desde stdin.
Opciones:
-h, --help show this help message and exit -w WIDTH, --width=WIDTH Width of ascii output -c COLUMNS, --columns=COLUMNS Only display this number of columns
He creado tablify para estos (y otros) propósitos. Instalar con
[sudo -H] pip3 install tablify
y
$ cat test.csv
Header1,Header2,Header3
Pizza,Artichoke dip,Bob''s Special of the Day
BLT,Ham on rye with the works,
$ tablify test.csv
Header1 , Header2 , Header3
Pizza , Artichoke dip , Bob''s Special of the Day
BLT , Ham on rye with the works ,
También funciona si los datos están separados por algo más que comas. Lo más importante es que conserva los delimitadores, por lo que también puede usarlo para diseñar sus tablas ASCII sin sacrificar su sintaxis [Markdown, CSV, LaTeX].
La respuesta de Ofri te da todo lo que pediste. Pero ... si no desea recordar el comando, puede agregar esto a su ~ / .bashrc (o equivalente):
csview()
{
local file="$1"
sed "s/,//t/g" "$file" | less -S
}
Esta es exactamente la misma respuesta que Ofri, excepto que la he envuelto en una función de shell y estoy usando la opción less -S
para detener el ajuste de líneas (hace que se comporte less
como una oficina / oocalc).
Abra un nuevo shell (o escriba source ~/.bashrc
en su shell actual) y ejecute el comando usando:
csview <filename>
Mi proyecto FOSS CSVfix permite visualizar archivos CSV en formato de tabla "ASCII art".
Otra herramienta de manipulación CSV multifuncional (y no solo): Miller . De su propia descripción, es como awk, sed, cortar, unir y ordenar datos indexados por nombre, como CSV, TSV y JSON tabular. (enlace al repositorio github: https://github.com/johnkerl/miller )
Puede instalar csvtool
(en Ubuntu) a través de
sudo apt-get install csvtool
y luego ejecute:
csvtool readable filename | view -
Esto lo hará agradable y bonito dentro de una instancia de vim de solo lectura, incluso si tiene algunas celdas con valores muy largos.
Si eres un vimmer, usa el plugin CSV , que es realmente beautiful .
Tabview es realmente bueno. Trabajé con más de 200 archivos MB que mostraban muy bien los que tenían bugs con LibreOffice y el complemento csv en gvim.
La versión de Anaconda está disponible aquí: https://anaconda.org/bioconda/tabview
Tabview: lightweight python curses línea de comandos CSV visor de archivos (y también otros datos tabulares de Python, como una lista de listas) está aquí en Github
caracteristicas:
- Python 2.7+, 3.x
- Soporte Unicode
- Vista similar a una hoja de cálculo para visualizar fácilmente datos tabulares
- Navegación tipo Vim (h, j, k, l, g (arriba), G (abajo), 12G goto línea 12, m - marca, ''- goto marca, etc.)
- Alternar fila de encabezado persistente
- Redimensionar dinámicamente los anchos y espacios de las columnas.
- Clasificación ascendente o descendente por cualquier columna. Orden "natural" para valores numéricos.
- Búsqueda de texto completo, nyp para alternar entre resultados de búsqueda
- ''Enter'' para ver el contenido completo de la celda
- Tirar del contenido de la celda al portapapeles.
- F1 o? para keybindings
- También se puede usar desde la línea de comandos de python para visualizar cualquier dato tabular (por ejemplo, lista de listas)
También puedes usar esto:
column -s, -t < somefile.csv | less -#2 -N -S
column
es un programa estándar de Unix que es muy conveniente: encuentra el ancho apropiado para cada columna y muestra el texto como una tabla con un formato agradable.
Nota: siempre que tenga campos vacíos, debe colocar algún tipo de marcador de posición, de lo contrario, la columna se fusionará con las siguientes columnas. El siguiente ejemplo muestra cómo usar sed
para insertar un marcador de posición:
$ cat data.csv
1,2,3,4,5
1,,,,5
$ sed ''s/,,/, ,/g;s/,,/, ,/g'' data.csv | column -s, -t
1 2 3 4 5
1 5
$ cat data.csv
1,2,3,4,5
1,,,,5
$ column -s, -t < data.csv
1 2 3 4 5
1 5
$ sed ''s/,,/, ,/g;s/,,/, ,/g'' data.csv | column -s, -t
1 2 3 4 5
1 5
Tenga en cuenta que la sustitución de ,,
para , ,
se realiza dos veces. Si lo haces solo una vez, 1,,,4
se convertirá en 1, ,,4
ya que la segunda coma ya coincide.
Usando TxtSushi puedes hacer:
csvtopretty filename.csv | less -S
Utilicé la respuesta de Pisswillis durante mucho tiempo.
csview()
{
local file="$1"
sed "s/,//t/g" "$file" | less -S
}
Pero luego combiné el código que encontré en http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line que funciona mejor para mí:
csview()
{
local file="$1"
cat "$file" | sed -e ''s/,,/, ,/g'' | column -s, -t | less -#5 -N -S
}
La razón por la que funciona mejor para mí es que maneja mejor las columnas anchas.
xsv es más que un espectador. Lo recomiendo para la mayoría de las tareas CSV en la línea de comandos, especialmente cuando se trata de grandes conjuntos de datos.
tblless
en el paquete de Tabulator envuelve el comando de column
Unix y también alinea las columnas numéricas.