Visualizzatore CSV da riga di comando? [chiuso]


308

Qualcuno sa di un visualizzatore CSV da riga di comando per Linux / OS X? Sto pensando a qualcosa di simile, lessma che distanzia le colonne in un modo più leggibile. (Andrei bene aprendolo con OpenOffice Calc o Excel, ma è troppo potente per guardare i dati come ho bisogno.) Avere lo scorrimento orizzontale e verticale sarebbe fantastico.


Dal momento che non posso dare una risposta: SC-IM è un visualizzatore e editor CLI per tabelle che possono anche aprire CSV. github.com/andmarti1424/sc-im
12431234123412341234123

Risposte:


441

Puoi anche usare questo:

column -s, -t < somefile.csv | less -#2 -N -S

column è un programma unix standard molto conveniente: trova la larghezza appropriata di ogni colonna e visualizza il testo come una tabella ben formattata.

Nota: ogni volta che si hanno campi vuoti, è necessario inserire un tipo di segnaposto, altrimenti la colonna viene unita alle seguenti colonne. L'esempio seguente mostra come utilizzare sedper inserire un segnaposto:

$ 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

Si noti che la sostituzione di ,,for , ,viene eseguita due volte. Se lo fai solo una volta, 1,,,4diventerà 1, ,,4poiché la seconda virgola è già abbinata.


2
Mi piace molto questa opzione - è bene saperlo column. Ho finito per renderlo uno script di shell breve (la maggior parte di essi è "come lo uso?" E il codice di controllo degli errori). github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes

24
La versione della colonna 'Debian GNU / Linux' ha l'opzione '-n': "Per impostazione predefinita, il comando column unirà più delimitatori adiacenti in un unico delimitatore quando si utilizza l'opzione -t; questa opzione disabilita quel comportamento. Questa opzione è un'estensione Debian GNU / Linux. "
klokop,

5
Sembra interrompersi se hai valori di colonna (citati) con virgole in essi. Qualche idea su come risolvere questo problema?
TM.

3
da 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
Sfortunatamente se un valore contiene una virgola, verrà diviso anche se viene quotato.
ffarquet,

107

È possibile installare csvtool(su Ubuntu) tramite

sudo apt-get install csvtool

e poi esegui:

csvtool readable filename | view -

Questo lo renderà bello e carino all'interno di un'istanza vim di sola lettura, anche se hai alcune celle con valori molto lunghi.


2
Per quelli che non si trovano nelle distribuzioni su base Debian, questo strumento sembra provenire da qui: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz Purtroppo il link "homepage" è morto e io non vedrai un modo semplice per scaricare l'intero archivio in un colpo solo.
Cincodenada,

9
Lo strumento non è in grado di gestire i file con
100 Mb

6
Questo strumento è disponibile nel ocaml-csvpacchetto baseper me in Centos7
Bryce Guinta,

72

Dai un'occhiata a csvkit . Fornisce una serie di strumenti che aderiscono alla filosofia UNIX (nel senso che sono piccoli, semplici, propositi e combinabili).

Ecco un esempio che estrae le dieci città più popolate della Germania dal database gratuito di Maxmind World Cities e visualizza il risultato in un formato leggibile dalla console:

$ 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 è indipendente dalla piattaforma perché è scritto in Python.


1
Funziona benissimo sul mio MAC. Molto utile per leggere file di grandi dimensioni.
James Lim,

4
Mi piace Csvkit. csvlook <nomefile.csv> | less -S
Sandeep,

5
Per ottenere csvkit si può solo pip installarlo: pip install csvkit. Godere!
glorifobia

46

Tabview: visualizzatore di file CSV della riga di comando di cython leggero (e anche altri dati tabulari di Python, come un elenco di elenchi) è qui su Github

Caratteristiche:

  • Python 2.7+, 3.x
  • Supporto Unicode
  • Vista simile a un foglio di calcolo per visualizzare facilmente i dati tabulari
  • Navigazione simile a Vim (h, j, k, l, g (in alto), G (in basso), 12G goto line 12, m - mark, '- goto mark, ecc.)
  • Attiva / disattiva la riga di intestazione persistente
  • Ridimensiona dinamicamente le larghezze e lo spazio delle colonne
  • Ordina crescente o decrescente per qualsiasi colonna. Ordinamento 'naturale' per valori numerici.
  • Ricerca full-text, n e p per scorrere tra i risultati della ricerca
  • 'Invio' per visualizzare il contenuto completo della cella
  • Yank contenuto della cella negli Appunti
  • F1 o? per le combinazioni di tasti
  • Può anche usare dalla riga di comando di Python per visualizzare qualsiasi dato tabulare (es. Elenco di elenchi)

1
Ottimo strumento. Ha aperto un enorme file che ha causato l'arresto anomalo di csvtool e openoffice. Anche molto veloce.
Leonardo,

Dopo 'pip install tabview' su Windows correttamente, come posso avviare il programma? Posso usare 'tabview file.csv' su Linux con successo, ma Windows non sembra funzionare. Grazie!
Chris,

Non credo che il modulo curses sia disponibile su Windows. Scusa! Potrebbe esserci un modulo di terze parti disponibile ma non ho fatto alcun sviluppo per Windows.
Scott Hansen,

Grazie per la spiegazione! Dopotutto è un fantastico strumento!
Chris

1
@CiroSantilli 烏坎 事件 2016 六四 事件 法轮功, purtroppo non ancora. Spero di mettere presto un po 'di tempo in tabview ... è stato un po' dormiente per un po 'qui. :(
Scott Hansen,


22

Il pacchetto nodejs tecfu / tty-table può essere installato a livello globale per fare esattamente questo:

apt-get install nodejs
npm i -g tty-table
cat data.csv | tty-table

tecfu / tty-table

Può anche gestire flussi.

Per ulteriori informazioni, consultare i documenti per l'utilizzo del terminale qui .


1
Si prega di lasciare un motivo se si vota in negativo. Questo pacchetto funziona e funziona bene.
user3751385

9
nodejs è una piattaforma web server. Non dovresti raccomandare a qualcuno di tagliare il pane con una motosega.
max

23
Il nodo è un sistema di scripting generico con collegamenti CLI, in che cosa differisce dall'uso di un one-liner perl o qualcosa del CPAN?
Racheet,

Mi piace molto questa opzione, ma quando la installo a meno, non sembra giusto. Sai se è necessario qualcosa in più per farlo funzionare con meno?
plafratt

Questo pacchetto si interrompe se il file contiene molte colonne (in particolare più della larghezza orizzontale dello schermo del terminale in grado di gestire) e non le allinea correttamente in seguito.
gented

10

xsv è più di un visualizzatore. Lo consiglio per la maggior parte delle attività CSV sulla riga di comando, specialmente quando si tratta di set di dati di grandi dimensioni.


9

Il mio progetto FOSS CSVfix ti consente di visualizzare i file CSV in formato tabella "ASCII art".


Esattamente quello che stavo cercando. Dovrò provare a compilarlo per OS X. (Potresti avere alcune patch in arrivo, chissà ...)
Benjamin Oakes,

Li darei davvero il benvenuto. Uno degli aspetti leggermente deprimenti dei progetti FOSS è il modo in cui poche persone contribuiscono effettivamente al codice. Certo, sono colpevole di questo come la prossima persona.

Perché il tuo progetto CSVfix non consente la navigazione repo? Rendere più difficile per gli altri vedere il codice non aumenta le probabilità di ottenere contributi, vero?
Dirk Eddelbuettel,

1
Pura pigrizia da parte mia, temo. Inoltre, fornire una zip del codice significa che chiunque può ottenerlo - se fornissi solo l'accesso al repository, le persone dovrebbero avere SVM o Hg installati. Se avessi iniziato a ricevere le patch, riconsidererei.

Ultimo impegno 2015-02-2015
Boris

8

La risposta di Ofri ti dà tutto ciò che hai chiesto. Ma .. se non vuoi ricordare il comando puoi aggiungerlo al tuo ~ / .bashrc (o equivalente):

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

Questo è esattamente lo stesso della risposta di Ofri, tranne per il fatto che l'ho racchiuso in una funzione shell e sto usando l' less -Sopzione per interrompere il wrapping delle linee (rende i lesscomportamenti più simili a quelli di un ufficio / oocalc).

Apri una nuova shell (o digita source ~/.bashrcla shell corrente) ed esegui il comando usando:

csview <filename>


5
Questo non gestisce la virgola tra virgolette.
Cheng

7

Ho usato la risposta di Pisswillis per molto tempo.

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

Ma poi ho combinato un po 'di codice che ho trovato su http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line che funziona meglio per me:

csview()
{
    local file="$1"
    cat "$file" | sed -e 's/,,/, ,/g' | column -s, -t | less -#5 -N -S
}

Il motivo per cui funziona meglio per me è che gestisce meglio le colonne larghe.



3

Ecco un'opzione (probabilmente troppo) semplice:

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

2
Anche questa è stata la mia prima inclinazione. Ma devi inserire abbastanza schede per abbinare il valore più lungo per la tua colonna ... Ho iniziato a diventare un po 'complicato e ho pensato "qualcun altro deve averlo già fatto."
Benjamin Oakes,

2
Stai anche ignorando il fatto che le virgole potrebbero essere citate e quindi non separatori. (tra le altre cose)
Ariel Allon,


2

Ho scritto questo csv_view.sh per formattare i CSV dalla riga di comando, questo legge l'intero file per capire la larghezza ottimale di ogni colonna (richiede perl, presuppone che non ci siano virgole nei campi, usa anche meno):


#!/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 puoi fare:

csvtopretty filename.csv | less -S

Downvote per non essere una procedura di installazione su una riga. Non ho il tempo di compilare questo :(. Se potessi fornire un pacchetto sarebbe fantastico.
masterxilo

@masterxilo non è un motivo valido per votare. Molti pacchetti oggi richiedono diversi passaggi per l'installazione. Inoltre, probabilmente sarebbe più veloce da installare che da scrivere il commento.
Yuval Meshorer,

2

Tabview è davvero buono. Funzionava con oltre 200 MB di file che venivano visualizzati in modo corretto e che erano corretti con LibreOffice e con il plugin CSV in gvim.

La versione Anaconda è disponibile qui: https://anaconda.org/bioconda/tabview


2

Ho creato tablign per questi (e altri) scopi. Installa con

[sudo -H] pip3 install tablign

e

$ 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 ,

Funziona anche se i dati sono separati da qualcosa di diverso dalle virgole. Soprattutto, conserva i delimitatori in modo da poterlo utilizzare anche per lo stile delle tabelle ASCII senza sacrificare la sintassi [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 Lo avevo rinominato tablign. Risolto nella descrizione.
Nico Schlömer,

1
Perfetto, funziona e basta.
masterxilo,

0

Ho scritto una sceneggiatura, viewtab , in Groovy proprio per questo scopo. Lo invochi come:

viewtab filename.csv

È fondamentalmente un foglio di calcolo ultraleggero che può essere richiamato dalla riga di comando, gestisce file CSV e tab separati, può leggere file MOLTO grandi che Excel e Numbers soffocano ed è molto veloce. Non è una riga di comando nel senso di essere solo di testo, ma è indipendente dalla piattaforma e probabilmente si adatta al conto di molte persone che cercano una soluzione al problema di ispezionare rapidamente molti o grandi file CSV mentre lavorano in un ambiente da riga di comando .

Lo script e come installarlo sono descritti qui:

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


0

C'è questo breve script da riga di comando in Python: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Basta scaricare e inserire nel tuo percorso. L'uso è come

csv2ascii.py [options] csv-file-path

Converti il ​​file CSV in csv-file-pathformato ASCII restituendo il risultato su stdout. Se csv-file-path= '-' allora leggi da stdin.

Opzioni:

  -h, --help mostra questo messaggio di aiuto ed esce
  -w WIDTH, --width = WIDTH
                        Larghezza dell'uscita ascii
  -c COLONNE, --colonne = COLONNE
                        Visualizza solo questo numero di colonne
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.