web-dev-qa-db-fra.com

Visualiseur CSV en ligne de commande?

Quelqu'un connaît-il un visualiseur CSV en ligne de commande pour Linux/OS X? Je pense à quelque chose comme less mais cela espère les colonnes de manière plus lisible. (Cela ne me poserait aucun problème si je l’ouvrais avec OpenOffice Calc ou Excel, mais c’est beaucoup trop puissant pour regarder les données comme il me faut.) Avoir le défilement horizontal et vertical serait génial.

280
Benjamin Oakes

Vous pouvez également utiliser ceci:

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

column est un programme unix standard très pratique: il trouve la largeur appropriée de chaque colonne et affiche le texte sous forme de tableau bien mis en forme.

Remarque: chaque fois que vous avez des champs vides, vous devez y insérer une sorte d’espace réservé, sinon la colonne est fusionnée avec les colonnes suivantes. L'exemple suivant montre comment utiliser sed pour insérer un espace réservé:

$ 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

Notez que la substitution de ,, par , , est effectuée deux fois. Si vous le faites une seule fois, 1,,,4 deviendra 1, ,,4 puisque la deuxième virgule est déjà appariée.

388
user437522

Vous pouvez installer csvtool (sur Ubuntu) via

Sudo apt-get install csvtool

puis lancez:

csvtool readable filename | view -

Cela rend Nice et joli à l'intérieur d'une instance vim en lecture seule, même si vous avez des cellules avec des valeurs très longues.

93
d_chall

Regardez csvkit . Il fournit un ensemble d'outils qui adhèrent à la philosophie UNIX (ce qui signifie qu'ils sont petits, simples, à but unique et peuvent être combinés).

Voici un exemple qui extrait les dix villes les plus peuplées d’Allemagne de la libre base de données Maxmind World Cities et affiche le résultat dans un format lisible par la 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 est indépendant de la plate-forme car il est écrit en Python.

61
Kai Sternad

Tabview: poids léger python visionneur de fichiers CSV en ligne de commande (ainsi que d'autres données tabulaires Python, comme une liste de listes) est ici sur Github

Fonctionnalités:

  • Python 2.7+, 3.x
  • Support Unicode
  • Vue semblable à une feuille de calcul pour une visualisation facile des données tabulaires
  • Navigation de type Vim (h, j, k, l, g (haut), G (bas), 12G, ligne 12, m - mark, '- goto mark, etc.)
  • Basculer la ligne d'en-tête persistant
  • Redimensionner dynamiquement les largeurs de colonnes et les espaces
  • Trier en ordre croissant ou décroissant par colonne. Tri d'ordre "naturel" pour les valeurs numériques.
  • Recherche en texte intégral, n et p pour faire défiler les résultats de la recherche
  • 'Enter' pour afficher le contenu complet de la cellule
  • Yank contenu de la cellule au presse-papiers
  • F1 ou? pour les raccourcis
  • Peut également utiliser la ligne de commande python pour visualiser des données tabulaires (par exemple, une liste de listes)
41
Scott Hansen

Si vous êtes amateur, utilisez le plugin CSV , qui est juste magnifique .

29
P. Myer Nore

Le paquet nodejs tecfu/tty-table peut être installé globalement pour faire ceci:

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

tecfu/tty-table

Il peut également gérer les flux.

Pour plus d'informations, voir le docs pour l'utilisation du terminal ici .

18
user3751385

Mon projet FOSS CSVfix vous permet d'afficher des fichiers CSV au format de tableau "Art ASCII".

10
anon

La réponse d'Ofri vous donne tout ce que vous avez demandé. Mais .. si vous ne voulez pas vous souvenir de la commande, vous pouvez ajouter ceci à votre ~/.bashrc (ou équivalent):

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

C'est exactement la même chose que la réponse d'Ofri, sauf que je l'ai encapsulée dans une fonction Shell et que j'utilise l'option less -S pour arrêter l'encapsulation des lignes (rend less se comporte davantage comme un bureau/oocalc).

Ouvrez un nouveau shell (ou tapez source ~/.bashrc dans votre shell actuel) et exécutez la commande en utilisant:

csview <filename>

8
pisswillis

xsv est plus qu'un spectateur. Je le recommande pour la plupart des tâches CSV sur la ligne de commande, en particulier lorsqu'il s'agit de grands ensembles de données.

8
smartmic

J'ai utilisé la réponse de pisswillis pendant longtemps.

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

Mais ensuite, j'ai combiné le code que j'ai trouvé sur http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line qui fonctionne mieux pour moi:

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

La raison pour laquelle cela fonctionne mieux pour moi est qu'il gère mieux les colonnes larges.

6
Tom Weiss

tblless dans le package Tabulator enveloppe la commande unix column et aligne également les colonnes numériques.

4
stefan.schroedl

Voici une option (probablement trop) simple:

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

En utilisant TxtSushi vous pouvez faire:

csvtopretty filename.csv | less -S
2
Keith

J'ai écrit ce fichier csv_view.sh pour formater les CSV à partir de la ligne de commande. Le fichier entier est lu pour déterminer la largeur optimale de chaque colonne (requiert Perl, en supposant qu'il n'y ait pas de virgule dans les champs, mais aussi en utilise moins):


#!/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
Jean Vincent

Encore un autre outil de manipulation CSV multifonctionnel (et pas seulement): Miller . D'après sa propre description, il ressemble à awk, sed, couper, joindre et trier des données indexées telles que CSV, TSV et JSON tabulaire. (lien vers le référentiel github: https://github.com/johnkerl/miller )

1
Nikos Alexandris

J'ai créé tablign à ces fins (et à d'autres). Installer avec

[Sudo -H] pip3 install tablign

et

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

Fonctionne également si les données sont séparées par autre chose que des virgules. Plus important encore, il préserve les délimiteurs afin que vous puissiez également l'utiliser pour styliser vos tables ASCII sans sacrifier votre [Markdown, CSV, LaTeX] syntaxe.

1
Nico Schlömer

Tabview est vraiment bon. Travaillé avec plus de 200 MB de fichiers bien affichés qui étaient bogués avec LibreOffice ainsi que le plugin CSV dans gvim.

La version d'Anaconda est disponible ici: https://anaconda.org/bioconda/tabview

1
shankerj

Il y a ce court script de ligne de commande en python: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Il suffit de télécharger et de placer dans votre chemin. L'utilisation est comme

csv2ascii.py [options] csv-file-path

Convertissez le fichier csv de csv-file-path en un formulaire ascii renvoyant le résultat sur la sortie standard. Si csv-file-path = '-', lisez stdin.

Les options:

 -h, --help affiche ce message d’aide et quitte 
 -w WIDTH, --width = WIDTH 
 Largeur de la sortie ascii 
 -c COLUMNS, - -columns = COLUMNS 
 N'afficher que ce nombre de colonnes 
0
Rufus Pollock

J'ai écrit un script, viewtab , dans Groovy uniquement à cette fin. Vous l'invoquez comme:

viewtab filename.csv

Il s’agit en fait d’une feuille de calcul très légère pouvant être appelée à partir de la ligne de commande, gérant les fichiers CSV et séparés par des tabulations, pouvant lire TRÈS gros fichiers sur lesquels Excel et Numbers s’étouffent, et est très rapide. Ce n'est pas une ligne de commande dans le sens où il ne s'agit que de texte, mais il est indépendant de la plate-forme et conviendra probablement à de nombreuses personnes à la recherche d'une solution au problème de l'inspection rapide de nombreux ou de gros fichiers CSV dans un environnement en ligne de commande. .

Le script et comment l'installer sont décrits ici:

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

0
James Durbin