Línea de comando CSV visor? [cerrado]


308

¿Alguien sabe de un visor CSV de línea de comandos para Linux / OS X? Estoy pensando en algo así, lesspero que separa las columnas de una manera más legible. (Estaría bien con abrirlo con OpenOffice Calc o Excel, pero eso es demasiado abrumador para solo mirar los datos como lo necesito). Tener un desplazamiento horizontal y vertical sería genial.


Como no puedo dar una respuesta: SC-IM es un visor y editor de CLI para tablas que también pueden abrir CSV. github.com/andmarti1424/sc-im
12431234123412341234123

Respuestas:


441

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 de cada columna y muestra el texto como una tabla bien formateada.

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 sedpara 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 ,,for , ,se realiza dos veces. Si lo hace solo una vez, 1,,,4se convertirá 1, ,,4ya que la segunda coma ya coincide.


2
Realmente me gusta esta opción, es bueno saberlo column. Terminé convirtiendo esto en un script de shell corto (la mayor parte es repetitivo "¿cómo lo uso?" Y código de comprobación de errores). github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes

24
La versión de columna 'Debian GNU / Linux' tiene la opción '-n': "De manera predeterminada, el comando de columna fusionará múltiples delimitadores adyacentes en un solo delimitador cuando se usa la opción -t; esta opción desactiva ese comportamiento. Esta opción es una extensión Debian GNU / Linux ".
klokop

55
Parece romperse si tiene valores de columna (entre comillas) con comas en ellos. ¿Algúna idea de cómo arreglar esto?
TM.

3
desde man column:-n By default, the column command will merge multiple adjacent delimiters into a single delimiter when using the -t option; this option disables that behavior. This option is a Debian GNU/Linux extension.
ezdazuzena

8
Desafortunadamente, si un valor contiene una coma, se dividirá incluso si se cita.
ffarquet

107

Puede instalar csvtool(en Ubuntu) a través de

sudo apt-get install csvtool

y luego ejecuta:

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.


2
Para aquellos que no están en distribuciones basadas en Debian, esta herramienta parece originarse desde aquí: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz Lamentablemente, el enlace "página de inicio" está muerto, y no No veo una manera fácil de descargar todo el archivo de una vez.
cincodenada

99
La herramienta no puede manejar archivos con 100Mb +
PedroSena

66
Esta herramienta está disponible en el ocaml-csvpaquete basepara mí en Centos7
Bryce Guinta

72

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, con un único 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 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.


1
Funciona muy bien en mi MAC. Muy útil para leer archivos grandes.
James Lim

44
Me gusta Csvkit csvlook <filename.csv> | menos -S
Sandeep

55
Para obtener csvkit sólo puede instalarlo pip: pip install csvkit. ¡Disfrutar!
gloriphobia

46

Vista de tabulación: el visor de archivos CSV de línea de comandos de Python curses ligero (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 tipo hoja de cálculo para visualizar fácilmente datos tabulares
  • Navegación tipo Vim (h, j, k, l, g (arriba), G (abajo), 12G goto line 12, m - mark, '- goto mark, etc.)
  • Alternar fila de encabezado persistente
  • Redimensionar dinámicamente anchos de columna y espacio
  • Ordenar ascendente o descendente por cualquier columna. Orden "natural" para los valores numéricos.
  • Búsqueda de texto completo, n y p para alternar entre resultados de búsqueda
  • 'Entrar' para ver el contenido completo de la celda
  • Yank contenido de la celda al portapapeles
  • F1 o? para combinaciones de teclas
  • También se puede usar desde la línea de comandos de python para visualizar cualquier dato tabular (por ejemplo, lista de listas)

1
Gran herramienta Abrió un archivo enorme que bloqueó csvtool y openoffice. Muy rápido también.
Leonardo

Después de 'pip install tabview' en Windows con éxito, ¿cómo inicio el programa? Puedo usar 'tabview file.csv' en linux con éxito, pero Windows no parece funcionar. ¡Gracias!
Chris

No creo que el módulo curses esté disponible en Windows. ¡Lo siento! Puede haber un módulo de terceros disponible, pero no he realizado ningún desarrollo para Windows.
Scott Hansen

¡Gracias por la explicación! ¡Es una herramienta increíble después de todo!
Chris

1
@CiroSantilli 烏坎 事件 2016 六四 事件 法轮功, lamentablemente aún no. Espero dedicar algo de tiempo a la vista de pestaña pronto ... ha estado bastante inactivo por un tiempo aquí. :(
Scott Hansen


22

El paquete de 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

tecfu / tty-table

También puede manejar transmisiones.

Para obtener más información, consulte los documentos sobre el uso del terminal aquí .


1
Por favor, deje un motivo si vota negativamente. Este paquete funciona y funciona bien.
user3751385

99
nodejs es una plataforma de servidor web. No debe recomendar a alguien que corte el pan con una motosierra.
max

23
El nodo es un sistema de scripting de propósito general con enlaces CLI, ¿en qué se diferencia de usar un one-liner perl o algo de CPAN?
Racheet

Realmente me gusta esta opción, pero cuando la canalizo a menos, no se ve bien. ¿Sabes si se requiere algo extra para que funcione con menos?
plafratt

Este paquete se rompe si el archivo contiene muchas columnas (en particular, más de lo que el ancho horizontal de la pantalla del terminal puede manejar) y no las alinea correctamente a partir de entonces.
Gented

10

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.


9

Mi proyecto CSVfix de FOSS le permite mostrar archivos CSV en formato de tabla "ASCII art".


Exactamente lo que estaba buscando. Tendré que intentar compilarlo para OS X. (Puede que tengas algunos parches en camino, quién sabe ...)
Benjamin Oakes

Les agradecería mucho. Uno de los aspectos ligeramente deprimentes de los proyectos de software libre es la poca gente que realmente aporta código. Por supuesto, soy tan culpable de esto como la próxima persona.

¿Por qué su proyecto CSVfix no permite la exploración de repositorios? Hacer que sea más difícil para otros ver el código no hace que sea más probable que obtengas contribuciones, ¿verdad?
Dirk Eddelbuettel

1
Pura pereza de mi parte, me temo. Además, proporcionar un código postal del código significa que cualquiera puede obtenerlo; si solo proporcionara acceso al repositorio, las personas tendrían que tener SVM o Hg instalado. Si comencé a recibir parches, lo reconsideraría.

Última confirmación en 2015‑02‑28
Boris

8

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
}

Esto es exactamente lo mismo que la respuesta de Ofri, excepto que lo he incluido en una función de shell y estoy usando la less -Sopción para detener el ajuste de líneas (haceless comporte más como una oficina / oocalc).

Abra un nuevo shell (o escriba source ~/.bashrcsu shell actual) y ejecute el comando usando:

csview <filename>


55
Esto no maneja comas en las citas.
Cheng

7

Usé la respuesta de Pisswillis durante mucho tiempo.

csview()
{
    local file="$1"
    sed "s/,/\t/g" "$file" | less -S
}

Pero luego combiné un 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.



3

Aquí hay una opción (probablemente también) simple:

sed "s/,/\t/g" filename.csv | less

2
Esa fue mi primera inclinación también. Pero tiene que insertar suficientes pestañas para que coincida con el valor más largo para su columna ... Comencé a complicarme un poco y pensé "alguien más ya debe haber hecho esto".
Benjamin Oakes

2
También ignora el hecho de que se pueden citar comas y, por lo tanto, no separadores. (entre otras cosas)
Ariel Allon


2

Escribí este csv_view.sh para formatear CSV desde la línea de comando, esto lee todo el archivo para determinar el ancho óptimo de cada columna (requiere perl, supone 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


2

Usando TxtSushi puedes hacer:

csvtopretty filename.csv | less -S

Voto negativo por no ser un procedimiento de instalación de una línea. No tengo tiempo para compilar esto :(. Si pudiera proporcionar un paquete que sería increíble.
masterxilo

@masterxilo esa no es una razón válida para votar negativamente. Muchos paquetes de hoy requieren varios pasos para instalar. Además, probablemente sería más rápido instalarlo que escribir el comentario.
Yuval Meshorer

2

Tabview es realmente bueno. Trabajó con archivos de más de 200 MB que se veían bien y que tenían errores con LibreOffice, así como con el complemento csv en gvim.

La versión de Anaconda está disponible aquí: https://anaconda.org/bioconda/tabview


2

He creado tablign para estos (y otros) propósitos. Instalar con

[sudo -H] pip3 install tablign

y

$ cat test.csv
Header1,Header2,Header3
Pizza,Artichoke dip,Bob's Special of the Day
BLT,Ham on rye with the works,
$ tablign 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 para que también pueda usarlo para diseñar sus tablas ASCII sin sacrificar su sintaxis [Markdown, CSV, LaTeX].


Collecting tablify Could not find a version that satisfies the requirement tablify (from versions: ) No matching distribution found for tablify
masterxilo

@masterxilo le había cambiado el nombre tablign. Corregido en la descripción.
Nico Schlömer

1
Perfecto, solo funciona.
masterxilo

0

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 comando, maneja archivos separados por CSV y separadores de pestañas, puede leer archivos MUY grandes que Excel y Numbers ahogan, y es muy rápido. No es una línea de comandos en el sentido de ser solo 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í:

http://bayesianconspiracy.blogspot.com/2012/06/quick-csvtab-file-viewer.html


0

Existe este breve script de línea de comandos en python: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Simplemente descargue y coloque en su camino. El uso es como

csv2ascii.py [options] csv-file-path

Convierta el archivo csv en csv-file-pathuna forma ascii que devuelva el resultado en stdout. Si csv-file-path= '-' entonces lee de stdin.

Opciones:

  -h, - ayuda a mostrar este mensaje de ayuda y salir
  -w ANCHO, --width = WIDTH
                        Ancho de salida ASCII
  -c COLUMNAS, --columnas = COLUMNAS
                        Mostrar solo este número de columnas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.