Visionneuse CSV en ligne de commande? [fermé]

308

Quelqu'un connaît-il une visionneuse CSV en ligne de commande pour Linux / OS X? Je pense à quelque chose comme lessmais qui espace les colonnes de manière plus lisible. (Je serais d'accord pour l'ouvrir avec OpenOffice Calc ou Excel, mais c'est beaucoup trop maîtrisé pour simplement regarder les données comme je le dois.) Avoir un défilement horizontal et vertical serait formidable.

Benjamin Oakes
la source
Puisque je ne peux pas donner de réponse: SC-IM est un visualiseur CLI et un éditeur pour les tables qui peuvent également ouvrir CSV. github.com/andmarti1424/sc-im
12431234123412341234123

Réponses:

441

Vous pouvez également utiliser ceci:

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

column est un programme Unix standard qui est très pratique - il trouve la largeur appropriée de chaque colonne et affiche le texte sous forme de tableau bien formaté.

Remarque: chaque fois que vous avez des champs vides, vous devez y placer une sorte d'espace réservé, sinon la colonne est fusionnée avec les colonnes suivantes. L'exemple suivant montre comment utiliser sedpour 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 ,,pour , ,est effectué deux fois. Si vous ne le faites qu'une seule fois, 1,,,4deviendra 1, ,,4puisque la deuxième virgule est déjà associée.

user437522
la source
2
J'aime vraiment cette option - c'est bon à savoir column. J'ai fini par en faire un script shell court (la plupart est du passe-partout "comment l'utiliser?" Et du code de vérification d'erreur). github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes
24
La version 'Debian GNU / Linux' de la colonne a l'option '-n': "Par défaut, la commande de colonne fusionnera plusieurs délimiteurs adjacents en un seul délimiteur lors de l'utilisation de l'option -t; cette option désactive ce comportement. Cette option est une extension Debian GNU / Linux. "
klokop
5
Il semble rompre si vous avez des valeurs de colonne (entre guillemets) avec des virgules. Une idée de comment résoudre ce problème?
TM.
3
de 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
Malheureusement, si une valeur contient une virgule, elle sera divisée même si elle est citée.
ffarquet
107

Vous pouvez installer csvtool(sur Ubuntu) via

sudo apt-get install csvtool

puis exécutez:

csvtool readable filename | view -

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

d_chall
la source
2
Pour ceux qui ne sont pas sur les distributions Debian, cet outil semble provenir d'ici: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz Malheureusement, le lien "page d'accueil" est mort, et je ne voyez pas un moyen facile de télécharger l'archive entière en une fois.
cincodenada
9
L'outil ne peut pas gérer les fichiers avec
100 Mo
6
Cet outil est disponible dans le ocaml-csvpackage du basepour moi dans Centos7
Bryce Guinta
72

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

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

Kai Sternad
la source
1
Fonctionne très bien sur mon MAC. Très utile pour lire des fichiers volumineux.
James Lim
4
J'aime Csvkit. csvlook <nomfichier.csv> | moins -S
Sandeep
5
Pour obtenir csvkit vous pouvez installer simplement pip il: pip install csvkit. Prendre plaisir!
gloriphobia
46

Tabview: le visualiseur de fichiers CSV en ligne de commande curses python léger (et aussi d'autres données tabulaires Python, comme une liste de listes) est ici sur Github

Fonctionnalités:

  • Python 2.7+, 3.x
  • Prise en charge Unicode
  • Vue semblable à une feuille de calcul pour visualiser facilement les données tabulaires
  • Navigation de type Vim (h, j, k, l, g (haut), G (bas), 12G goto ligne 12, m - mark, '- goto mark, etc.)
  • Basculer la ligne d'en-tête persistante
  • Redimensionner dynamiquement les largeurs et l'espace des colonnes
  • Triez croissant ou décroissant par n'importe quelle colonne. Tri d'ordre «naturel» pour les valeurs numériques.
  • Recherche plein texte, n et p pour parcourir les résultats de la recherche
  • «Entrée» pour afficher le contenu complet de la cellule
  • Yank contenu des cellules dans le presse-papiers
  • F1 ou? pour les raccourcis clavier
  • Peut également être utilisé à partir de la ligne de commande python pour visualiser toutes les données tabulaires (par exemple, liste de listes)
Scott Hansen
la source
1
Excellent outil. Ouverture d'un énorme fichier qui a planté csvtool et openoffice. Très rapide aussi.
Leonardo
Après 'pip install tabview' sur Windows avec succès, comment lancer le programme? Je peux utiliser 'tabview file.csv' sur Linux avec succès, mais Windows ne semble pas fonctionner. Merci!
Chris
Je ne pense pas que le module curses soit disponible sur Windows. Désolé! Il y a peut-être un module tiers disponible mais je n'ai fait aucun développement pour Windows.
Scott Hansen
Merci pour l'explication! C'est un outil génial après tout!
Chris
1
@CiroSantilli 烏坎 事件 2016 六四 事件 法轮功, malheureusement pas encore. J'espère mettre un peu de temps dans tabview bientôt ... cela a été plutôt dormant pendant un certain temps ici. :(
Scott Hansen
22

Le package nodejs tecfu / tty-table peut être globalement installé pour faire précisément ceci:

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

tecfu / tty-table

Il peut également gérer des flux.

Pour plus d'informations, consultez les documents d'utilisation du terminal ici .

user3751385
la source
1
Veuillez laisser une raison si vous votez. Ce package fonctionne et fonctionne bien.
user3751385
9
nodejs est une plate-forme de serveur Web. Vous ne devriez pas recommander à quelqu'un de couper du pain avec une tronçonneuse.
max
23
Le nœud est un système de script à usage général avec des liaisons CLI, en quoi est-ce différent de l'utilisation d'un Perl one-liner ou quelque chose de CPAN?
Racheet
J'aime vraiment cette option, mais quand je la redirige vers moins, elle ne me semble pas correcte. Savez-vous si quelque chose de plus est nécessaire pour le faire fonctionner avec moins?
plafratt
Ce package se casse si le fichier contient de nombreuses colonnes (en particulier plus que la largeur horizontale de l'écran du terminal) et ne les aligne pas correctement par la suite.
gented
10

xsv est plus qu'une visionneuse. 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.

smartmic
la source
9

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

Victor Sergienko
la source
Exactement ce que je cherchais. Je vais devoir essayer de le compiler pour OS X. (Vous pourriez avoir des correctifs à venir, qui sait ...)
Benjamin Oakes
Je les accueillerais beaucoup. L'un des aspects légèrement déprimants des projets FOSS est le peu de personnes qui contribuent réellement au code. Bien sûr, je suis aussi coupable de cela que la prochaine personne.
Pourquoi votre projet CSVfix n'autorise-t-il pas la navigation repo? Rendre plus difficile pour les autres de voir le code ne rend pas plus probable que vous obteniez des contributions, n'est-ce pas?
Dirk Eddelbuettel
1
Paresse pure de ma part, j'en ai bien peur. En outre, fournir un zip du code signifie que tout le monde peut l'obtenir - si je ne fournissais qu'un accès repo, les gens devraient avoir installé SVM ou Hg. Si je commençais à recevoir des correctifs, je reconsidérerais.
Dernier commit le 2015‑02‑28
Boris
8

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 l'ajouter à 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 enveloppé dans une fonction shell et j'utilise l' less -Soption pour arrêter le wrapping des lignes (fait lessse comporter plus comme un bureau / oocalc).

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

csview <filename>

pisswillis
la source
5
Cela ne gère pas les virgules entre guillemets.
Cheng
7

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

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

Mais j'ai ensuite combiné du 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.

Tom Weiss
la source
4

tbllessdans le package Tabulator encapsule la columncommande unix et aligne également les colonnes numériques.

stefan.schroedl
la source
3

Voici une option (probablement trop) simple:

sed "s/,/\t/g" filename.csv | less
Ofri Raviv
la source
2
C'était aussi ma première inclination. Mais vous devez insérer suffisamment d'onglets pour correspondre à la valeur la plus longue de votre colonne ... Cela a commencé à devenir un peu compliqué et je pensais que "quelqu'un d'autre avait déjà fait cela."
Benjamin Oakes
2
Vous ignorez également le fait que des virgules peuvent être citées et donc pas des séparateurs. (entre autres)
Ariel Allon
3

Encore un autre outil de manipulation CSV multifonctionnel (et pas seulement): Miller . D'après sa propre description, c'est comme awk, sed, cut, join et tri pour les données indexées comme CSV, TSV et JSON tabulaire. (lien vers le référentiel github: https://github.com/johnkerl/miller )

Nikos Alexandris
la source
2

J'ai écrit ce csv_view.sh pour formater les CSV à partir de la ligne de commande, cela lit le fichier entier pour déterminer la largeur optimale de chaque colonne (nécessite perl, suppose qu'il n'y a pas de virgule dans les champs, utilise également 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

Jean Vincent
la source
2

En utilisant TxtSushi, vous pouvez faire:

csvtopretty filename.csv | less -S
Keith
la source
Downvote pour ne pas être une procédure d'installation d'une ligne. Je n'ai pas le temps de compiler ceci :(. Si vous pouviez fournir un paquet qui serait génial.
masterxilo
@masterxilo ce n'est pas une raison valable pour voter contre. De nombreux packages nécessitent aujourd'hui plusieurs étapes d'installation. De plus, il serait probablement plus rapide à installer qu'à rédiger le commentaire.
Yuval Meshorer
2

Tabview est vraiment bon. Travaillé avec 200 + fichiers MB qui s'affichaient bien qui étaient bogués avec LibreOffice ainsi que le plugin csv dans gvim.

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

Shankerj
la source
2

J'ai créé un tableau à 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 conserve les délimiteurs afin que vous puissiez également l'utiliser pour styliser vos tables ASCII sans sacrifier votre syntaxe [Markdown, CSV, LaTeX].

Nico Schlömer
la source
Collecting tablify Could not find a version that satisfies the requirement tablify (from versions: ) No matching distribution found for tablify
masterxilo
@masterxilo je l'avais renommé tablign. Corrigé dans la description.
Nico Schlömer
1
Parfait, ça marche.
masterxilo
0

J'ai écrit un script, viewtab , dans Groovy dans ce but. Vous l'invoquez comme:

viewtab filename.csv

Il s'agit essentiellement d'une feuille de calcul ultra-légère qui peut être invoquée à partir de la ligne de commande, gère les fichiers CSV et séparés par des tabulations, peut lire de 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 d'être uniquement textuel, mais il est indépendant de la plate-forme et conviendra probablement à la plupart des personnes à la recherche d'une solution au problème de l'inspection rapide de nombreux ou de gros fichiers CSV tout en travaillant dans un environnement de ligne de commande .

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

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

James Durbin
la source
0

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 sur votre chemin. L'utilisation est comme

csv2ascii.py [options] csv-file-path

Convertissez le fichier csv à csv-file-pathen forme ascii en retournant le résultat sur stdout. Si csv-file-path= '-' alors lisez depuis stdin.

Options:

  -h, --help afficher ce message d'aide et quitter
  -w LARGEUR, --largeur = LARGEUR
                        Largeur de sortie ascii
  -c COLONNES, --colonnes = COLONNES
                        N'afficher que ce nombre de colonnes
Rufus Pollock
la source