Kennt jemand einen Befehlszeilen-CSV-Viewer für Linux/OS X? Ich denke da an etwas wie less
aber dadurch werden die Spalten besser lesbar verteilt. (Ich hätte kein Problem damit, die Datei mit OpenOffice Calc oder Excel zu öffnen, aber das ist viel zu aufwendig für nur siehe Ich muss mir die Daten ansehen, wie ich sie brauche.) Ein horizontaler und vertikaler Bildlauf wäre toll.
Antworten
Zu viele Anzeigen?Ein weiteres multifunktionales Werkzeug zur CSV-Bearbeitung (und nicht nur das): Müller . Nach seiner eigenen Beschreibung ist es wie awk, sed, cut, join und sort für namensindizierte Daten wie CSV, TSV und tabellarisches JSON. (Link zum Github-Repository: https://github.com/johnkerl/miller )
tblless
dans le Tabulator Paket umhüllt das Unix column
Befehl und richtet auch numerische Spalten aus.
Ich habe erstellt tablign für diese (und andere) Zwecke. Installieren mit
pip install tablign
と
$ 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 es konserviert die Begrenzungszeichen, so dass Sie damit auch Ihre ASCII-Tabellen gestalten können, ohne Ihre [Markdown,CSV,LaTeX]-Syntax zu opfern.
Ich habe dieses csv_view.sh geschrieben, um CSV-Dateien von der Kommandozeile aus zu formatieren. Es liest die gesamte Datei, um die optimale Breite jeder Spalte herauszufinden (erfordert Perl, setzt voraus, dass es keine Kommas in den Feldern gibt, verwendet auch less):
#!/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