Befehlszeilen-CSV-Viewer? [geschlossen]

308

Kennt jemand einen Kommandozeilen-CSV-Viewer für Linux / OS X? Ich denke an so etwas, lessaber das räumt die Spalten besser lesbar aus. (Ich würde es gut mit ihm mit Openoffice Calc oder Excel öffnen, aber das ist Art und Weise überwältigt zu für nur schauen auf die Daten , wie es nötig ist .) Mit horizontales und vertikales Scrollen wäre toll.

Benjamin Oakes
quelle
Da ich keine Antwort geben kann: SC-IM ist ein CLI-Viewer und Editor für Tabellen, die auch CSV öffnen können. github.com/andmarti1424/sc-im
12431234123412341234123

Antworten:

441

Sie können auch Folgendes verwenden:

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

column ist ein Standard-Unix-Programm, das sehr praktisch ist - es findet die entsprechende Breite jeder Spalte und zeigt den Text als schön formatierte Tabelle an.

Hinweis: Wenn Sie leere Felder haben, müssen Sie einen Platzhalter einfügen, da sonst die Spalte mit den folgenden Spalten zusammengeführt wird. Das folgende Beispiel zeigt, wie Sie sedeinen Platzhalter einfügen:

$ 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

Beachten Sie, dass die Ersetzung von ,,for , ,zweimal erfolgt. Wenn Sie es nur einmal tun, 1,,,4wird, 1, ,,4da das zweite Komma bereits übereinstimmt.

user437522
quelle
2
Ich mag diese Option wirklich - es ist gut zu wissen column. Am Ende habe ich daraus ein kurzes Shell-Skript gemacht (das meiste davon ist Boilerplate "Wie verwende ich es?" Und Fehlerprüfcode). github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes
24
Die 'Debian GNU / Linux'-Version der Spalte verfügt über die Option' -n ': "Standardmäßig führt der Spaltenbefehl bei Verwendung der Option -t mehrere benachbarte Trennzeichen zu einem einzigen Trennzeichen zusammen. Diese Option deaktiviert dieses Verhalten. Diese Option ist aktiviert eine Debian GNU / Linux-Erweiterung. "
Klokop
5
Es scheint zu brechen, wenn Sie Spaltenwerte (in Anführungszeichen) mit Kommas enthalten. Irgendeine Idee, wie man das behebt?
TM.
3
von 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
Wenn ein Wert ein Komma enthält, wird er leider auch dann aufgeteilt, wenn er in Anführungszeichen gesetzt wird.
Ffarquet
107

Sie können csvtool(unter Ubuntu) über installieren

sudo apt-get install csvtool

und dann ausführen:

csvtool readable filename | view -

Dies macht es in einer schreibgeschützten vim-Instanz schön und hübsch, selbst wenn Sie einige Zellen mit sehr langen Werten haben.

d_chall
quelle
2
Für diejenigen, die nicht auf Debian-Basis-Distributionen arbeiten, scheint dieses Tool von hier zu stammen: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz Leider ist der Link "Homepage" tot, und ich nicht Es gibt keine einfache Möglichkeit, das gesamte Archiv auf einmal herunterzuladen.
Cincodenada
9
Das Tool kann keine Dateien mit 100Mb + verarbeiten
PedroSena
6
Dieses Tool ist aus dem ocaml-csvPaket in der basefür mich in Centos7
Bryce Guinta
72

Schauen Sie sich csvkit an . Es bietet eine Reihe von Tools, die der UNIX-Philosophie entsprechen (dh sie sind klein, einfach, zweckmäßig und können kombiniert werden).

Hier ist ein Beispiel, das die zehn bevölkerungsreichsten Städte Deutschlands aus der kostenlosen Maxmind World Cities-Datenbank extrahiert und das Ergebnis in einem konsolenlesbaren Format anzeigt:

$ 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 ist plattformunabhängig, da es in Python geschrieben ist.

Kai Sternad
quelle
1
Funktioniert hervorragend auf meinem MAC. Sehr nützlich zum Lesen großer Dateien.
James Lim
4
Ich mag Csvkit. csvlook <Dateiname.csv> | weniger -S
Sandeep
5
Um csvkit zu erhalten, können Sie es einfach per Pip installieren : pip install csvkit. Genießen!
Gloriphobie
46

Tabview: Der leichtgewichtige Python-Curses-Befehlszeilen-CSV-Datei-Viewer (und auch andere tabellarische Python-Daten wie eine Liste von Listen) befindet sich hier auf Github

Eigenschaften:

  • Python 2.7+, 3.x.
  • Unicode-Unterstützung
  • Tabellenkalkulationsähnliche Ansicht zur einfachen Visualisierung von Tabellendaten
  • Vim-ähnliche Navigation (h, j, k, l, g (oben), G (unten), 12G, gehe zu Zeile 12, m - Markierung, '- gehe zu Markierung usw.)
  • Schalten Sie die persistente Kopfzeile um
  • Ändern Sie die Größe von Spaltenbreiten und Lücken dynamisch
  • Sortieren Sie aufsteigend oder absteigend nach einer beliebigen Spalte. Sortierung nach 'natürlicher' Reihenfolge für numerische Werte.
  • Volltextsuche, n und p, um zwischen den Suchergebnissen zu wechseln
  • 'Enter', um den gesamten Zelleninhalt anzuzeigen
  • Ziehe den Zelleninhalt in die Zwischenablage
  • F1 oder? für Tastenkombinationen
  • Kann auch über die Python-Befehlszeile verwendet werden, um tabellarische Daten (z. B. Listenlisten) anzuzeigen.
Scott Hansen
quelle
1
Tolles Werkzeug. Öffnete eine riesige Datei, die csvtool und openoffice zum Absturz brachte. Sehr schnell auch.
Leonardo
Wie starte ich das Programm, nachdem 'pip install tabview' unter Windows erfolgreich ausgeführt wurde? Ich kann 'tabview file.csv' unter Linux erfolgreich verwenden, aber Windows scheint nicht zu funktionieren. Vielen Dank!
Chris
Ich glaube nicht, dass das Curses-Modul unter Windows verfügbar ist. Es tut uns leid! Möglicherweise ist ein Modul eines Drittanbieters verfügbar, aber ich habe keine Entwicklung für Windows durchgeführt.
Scott Hansen
Vielen Dank für die Erklärung! Es ist immerhin ein großartiges Werkzeug!
Chris
1
@CiroSantilli 事件 事件 2016 六四 事件 法轮功, leider noch nicht. Ich hoffe, dass ich bald etwas Zeit in die Tab-Ansicht stecken kann ... es ist hier für eine Weile ziemlich ruhend. :(
Scott Hansen
22

Das nodejs-Paket tecfu / tty-table kann global installiert werden, um genau dies zu tun:

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

tecfu / tty-table

Es kann auch Streams verarbeiten.

Weitere Informationen finden Sie in den Dokumenten zur Verwendung des Terminals hier .

user3751385
quelle
1
Bitte hinterlassen Sie einen Grund, wenn Sie abstimmen. Dieses Paket funktioniert und funktioniert gut.
user3751385
9
nodejs ist eine Webserver-Plattform. Sie sollten niemandem empfehlen, Brot mit einer Kettensäge zu schneiden.
Max
23
node ist ein Allzweck-Skriptsystem mit CLI-Bindungen. Wie unterscheidet sich das von der Verwendung eines Perl-Einzeilers oder etwas von CPAN?
Racheet
Ich mag diese Option wirklich, aber wenn ich sie auf weniger pfeife, sieht sie nicht richtig aus. Wissen Sie, ob etwas Besonderes erforderlich ist, damit es mit weniger funktioniert?
Plafratt
Dieses Paket wird unterbrochen, wenn die Datei viele Spalten enthält (insbesondere mehr als die horizontale Breite des Terminalbildschirms verarbeiten kann) und diese anschließend nicht richtig ausrichtet.
Gented
10

xsv ist mehr als ein Betrachter. Ich empfehle es für die meisten CSV-Aufgaben in der Befehlszeile, insbesondere bei großen Datenmengen.

smartmic
quelle
9

Mit meinem FOSS-Projekt CSVfix können Sie CSV-Dateien im Tabellenformat "ASCII art" anzeigen.

Victor Sergienko
quelle
Genau das, wonach ich gesucht habe. Ich muss versuchen, es für OS X zu kompilieren. (Möglicherweise werden einige Patches auf Sie
Benjamin Oakes
Ich würde sie sehr begrüßen. Einer der etwas deprimierenden Aspekte von FOSS-Projekten ist, wie wenige Leute tatsächlich Code beitragen. Natürlich bin ich daran genauso schuld wie die nächste Person.
Warum erlaubt Ihr CSVfix-Projekt kein Repo-Browsing? Wenn es für andere schwieriger wird, den Code zu sehen, ist es nicht wahrscheinlicher, dass Sie Beiträge erhalten, oder?
Dirk Eddelbuettel
1
Ich fürchte, reine Faulheit meinerseits. Wenn Sie eine Postleitzahl des Codes bereitstellen, kann jeder diese erhalten. Wenn ich nur Repo-Zugriff gewähren würde, müssten SVM oder Hg installiert sein. Wenn ich Patches erhalten würde, würde ich es mir noch einmal überlegen.
Letzte Verpflichtung am 28.02.2015
Boris
8

Ofris Antwort gibt dir alles, wonach du gefragt hast. Aber ... wenn Sie sich nicht an den Befehl erinnern möchten, können Sie diesen zu Ihrem ~ / .bashrc (oder einem gleichwertigen) hinzufügen:

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

Dies ist genau das Gleiche wie die Antwort von Ofri, außer dass ich sie in eine Shell-Funktion eingewickelt habe und die less -SOption verwende, um das Umbrechen von Zeilen zu stoppen ( lessverhält sich eher wie ein Büro / eine Oocalc).

Öffnen Sie eine neue Shell (oder geben Sie source ~/.bashrcIhre aktuelle Shell ein) und führen Sie den Befehl aus mit:

csview <filename>

Pisswillis
quelle
5
In Anführungszeichen wird kein Komma behandelt.
Cheng
7

Ich habe lange Zeit die Antwort von pisswillis verwendet.

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

Aber dann kombinierte ich einen Code, den ich unter http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line gefunden hatte und der für mich besser funktioniert:

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

Der Grund, warum es für mich besser funktioniert, ist, dass es breite Spalten besser handhabt.

Tom Weiss
quelle
4

tbllessIm Tabulator- Paket wird der Unix- columnBefehl eingeschlossen und auch numerische Spalten ausgerichtet.

stefan.schroedl
quelle
3

Hier ist eine (wahrscheinlich auch) einfache Option:

sed "s/,/\t/g" filename.csv | less
Ofri Raviv
quelle
2
Das war auch meine erste Neigung. Aber Sie müssen genügend Tabulatoren einfügen, um dem längsten Wert für Ihre Spalte zu entsprechen ... Es wurde etwas kompliziert und ich dachte, "jemand anderes muss dies bereits getan haben".
Benjamin Oakes
2
Sie ignorieren auch die Tatsache, dass Kommas möglicherweise in Anführungszeichen stehen und daher keine Trennzeichen. (unter anderem)
Ariel Allon
3

Ein weiteres multifunktionales CSV-Manipulationswerkzeug (und nicht nur): Miller . Nach seiner eigenen Beschreibung ist es wie awk, sed, cut, join und sort für namenindizierte Daten wie CSV, TSV und tabellarisches JSON. (Link zum Github-Repository: https://github.com/johnkerl/miller )

Nikos Alexandris
quelle
2

Ich habe diese Datei csv_view.sh geschrieben, um CSVs über die Befehlszeile zu formatieren. Dabei wird die gesamte Datei gelesen, um die optimale Breite jeder Spalte zu ermitteln (erfordert Perl, setzt voraus, dass in Feldern keine Kommas vorhanden sind, verwendet auch weniger):


#!/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
quelle
2

Mit TxtSushi können Sie Folgendes tun:

csvtopretty filename.csv | less -S
Keith
quelle
Downvote, weil es sich nicht um ein einzeiliges Installationsverfahren handelt. Ich habe nicht die Zeit, dies zu kompilieren :(. Wenn Sie ein Paket bereitstellen könnten, das fantastisch wäre.
masterxilo
@masterxilo das ist kein gültiger Grund für eine Ablehnung. Viele Pakete erfordern heutzutage mehrere Schritte zur Installation. Außerdem wäre die Installation wahrscheinlich schneller als das Schreiben des Kommentars.
Yuval Meshorer
2

Tabview ist wirklich gut. Arbeitete mit mehr als 200 MB Dateien, die gut angezeigt wurden und mit LibreOffice sowie dem CSV-Plugin in gvim fehlerhaft waren.

Die Anaconda-Version ist hier verfügbar: https://anaconda.org/bioconda/tabview

shankerj
quelle
2

Ich habe Tablign für diese (und andere) Zwecke erstellt. Installieren mit

[sudo -H] pip3 install tablign

und

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

Funktioniert auch, wenn die Daten durch etwas anderes als Kommas getrennt sind. Am wichtigsten ist, dass die Trennzeichen erhalten bleiben , sodass Sie damit auch Ihre ASCII-Tabellen formatieren können, ohne die Syntax [Markdown, CSV, LaTeX] zu beeinträchtigen.

Nico Schlömer
quelle
Collecting tablify Could not find a version that satisfies the requirement tablify (from versions: ) No matching distribution found for tablify
Masterxilo
@masterxilo Ich hatte es umbenannt in tablign. In der Beschreibung behoben.
Nico Schlömer
1
Perfekt, funktioniert einfach.
Masterxilo
0

Zu diesem Zweck habe ich in Groovy ein Skript, viewtab , geschrieben. Sie rufen es auf wie:

viewtab filename.csv

Es handelt sich im Grunde genommen um eine superleichte Tabelle, die über die Befehlszeile aufgerufen werden kann, CSV- und tabulatorgetrennte Dateien verarbeitet, SEHR große Dateien lesen kann, an denen Excel und Numbers ersticken, und die sehr schnell ist. Es ist keine Befehlszeile im Sinne von Nur-Text, aber es ist plattformunabhängig und wird wahrscheinlich für viele Leute geeignet sein, die nach einer Lösung für das Problem suchen, viele oder große CSV-Dateien während der Arbeit in einer Befehlszeilenumgebung schnell zu überprüfen .

Das Skript und die Installation werden hier beschrieben:

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

James Durbin
quelle
0

In Python gibt es dieses kurze Befehlszeilenskript: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Einfach herunterladen und in deinen Pfad einfügen. Nutzung ist wie

csv2ascii.py [options] csv-file-path

Konvertieren Sie die CSV-Datei in csv-file-pathdas ASCII-Formular und geben Sie das Ergebnis auf stdout zurück. Wenn csv-file-path= '-', dann lesen Sie von stdin.

Optionen:

  -h, --help Diese Hilfemeldung anzeigen und beenden
  -w WIDTH, --width = WIDTH
                        Breite der ASCII-Ausgabe
  -c SPALTEN, --spalten = SPALTEN
                        Zeigen Sie nur diese Anzahl von Spalten an
Rufus Pollock
quelle