Przeglądarka CSV z wiersza poleceń? [Zamknięte]


308

Czy ktoś wie o przeglądarce wiersza polecenia CSV dla systemu Linux / OS X? Myślę o czymś podobnym, lessale to rozdziela kolumny w bardziej czytelny sposób. (Byłbym w porządku, otwierając go za pomocą OpenOffice Calc lub Excel, ale to jest zbyt przesadzone, by po prostu patrzeć na dane tak, jak muszę). Posiadanie przewijania w poziomie i pionie byłoby świetne.


Ponieważ nie mogę udzielić odpowiedzi: SC-IM to przeglądarka i edytor CLI dla tabel, które mogą również otwierać CSV. github.com/andmarti1424/sc-im
12431234123412341234123

Odpowiedzi:


441

Możesz także użyć tego:

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

column jest standardowym programem uniksowym, który jest bardzo wygodny - znajduje odpowiednią szerokość każdej kolumny i wyświetla tekst jako ładnie sformatowaną tabelę.

Uwaga: ilekroć masz puste pola, musisz wstawić w nich jakiś symbol zastępczy, w przeciwnym razie kolumna zostanie scalona z następnymi kolumnami. Poniższy przykład ilustruje sposób sedwstawiania symbolu zastępczego:

$ 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

Zauważ, że podstawienie ,,na , ,odbywa się dwa razy. Jeśli zrobisz to tylko raz, 1,,,4stanie się, 1, ,,4ponieważ drugi przecinek jest już dopasowany.


2
Naprawdę podoba mi się ta opcja - warto o tym wiedzieć column. Skończyło się na tym, że utworzyłem krótki skrypt powłoki (większość z nich to „jak mam go używać?” I kod sprawdzający błędy). github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes

24
Wersja kolumny „Debian GNU / Linux” ma opcję „-n”: „Domyślnie polecenie column scali wiele sąsiednich separatorów w jeden separator podczas korzystania z opcji -t; ta opcja wyłącza to zachowanie. Ta opcja jest rozszerzenie Debian GNU / Linux. ”
klokop

5
Wygląda na to, że się psuje, jeśli masz wartości kolumn (cytowane) z przecinkami. Jakiś pomysł jak to naprawić?
TM.

3
od 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
Niestety, jeśli wartość zawiera przecinek, zostanie podzielona, ​​nawet jeśli zostanie podana w cudzysłowie.
ffarquet

107

Możesz zainstalować csvtool(na Ubuntu) przez

sudo apt-get install csvtool

a następnie uruchom:

csvtool readable filename | view -

To sprawi, że będzie ładnie i ładnie wewnątrz instancji vim tylko do odczytu, nawet jeśli masz komórki o bardzo długich wartościach.


2
Dla tych, którzy nie znajdują się w dystrybucji opartej na Debianie, to narzędzie wydaje się pochodzić stąd: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz Niestety link „strona główna” jest martwy, a ja nie nie zobaczysz łatwego sposobu na pobranie całego archiwum za jednym zamachem.
cincodenada

9
Narzędzie nie obsługuje plików z
przepływnością

6
To narzędzie jest dostępne z ocaml-csvpakietu basedla mnie w Centos7
Bryce Guinta

72

Zobacz csvkit . Zapewnia zestaw narzędzi zgodnych z filozofią UNIX (co oznacza, że ​​są małe, proste, jednofunkcyjne i można je łączyć).

Oto przykład, który wyodrębnia dziesięć najbardziej zaludnionych miast w Niemczech z bezpłatnej bazy danych Maxmind World Cities i wyświetla wynik w formacie czytelnym dla konsoli:

$ 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 jest niezależny od platformy, ponieważ został napisany w języku Python.


1
Działa świetnie na moim MAC. Bardzo przydatny do czytania dużych plików.
James Lim,

4
Lubię Csvkit. csvlook <nazwa_pliku.csv> | mniej -S
Sandeep

5
Aby uzyskać csvkit można tylko pip zainstalować go: pip install csvkit. Cieszyć się!
glorifobia,

46

Tabview: lekki Python przeklina przeglądarkę plików CSV (a także inne tabelaryczne dane Pythona, takie jak lista list) jest tutaj na Github

Funkcje:

  • Python 2.7+, 3.x
  • Obsługa Unicode
  • Widok podobny do arkusza kalkulacyjnego do łatwej wizualizacji danych tabelarycznych
  • Nawigacja podobna do Vima (h, j, k, l, g (góra), G (dół), linia 12G goto 12, m - znak, '- znak goto itp.)
  • Przełącz trwały wiersz nagłówka
  • Dynamicznie zmieniaj szerokość kolumn i odstępy
  • Sortuj rosnąco lub malejąco według dowolnej kolumny. Sortowanie „naturalne” według wartości liczbowych.
  • Wyszukiwanie pełnotekstowe, n i p, aby przełączać między wynikami wyszukiwania
  • „Enter”, aby wyświetlić pełną zawartość komórki
  • Wyciągnij zawartość komórki do schowka
  • F1 czy? dla skrótów klawiszowych
  • Może także używać z wiersza poleceń Pythona do wizualizacji dowolnych danych tabelarycznych (np. List list)

1
Świetne narzędzie. Otworzyłem ogromny plik, który rozbił csvtool i openoffice. Bardzo szybko też.
Leonardo

Po pomyślnym uruchomieniu programu Pip tabview w systemie Windows, jak uruchomić program? Mogę z powodzeniem używać pliku tabview file.csv na Linuksie, ale system Windows nie działa. Dzięki!
Chris

Nie sądzę, aby moduł przekleństw był dostępny w systemie Windows. Przepraszam! Być może dostępny jest moduł innej firmy, ale nie opracowałem żadnego oprogramowania dla systemu Windows.
Scott Hansen

Dziękuję za wyjaśnienie! To przecież niesamowite narzędzie!
Chris

1
@CiroSantilli 事件 事件 2016 六四 事件 法轮功, niestety jeszcze nie. Mam nadzieję, że wkrótce poświęcę trochę czasu na tabview ... od jakiegoś czasu było to raczej uśpione. :(
Scott Hansen


22

Pakiet nodejs tecfu / tty-table można zainstalować globalnie, aby dokładnie to zrobić:

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

tecfu / tty-table

Może także obsługiwać strumienie.

Aby uzyskać więcej informacji, zobacz dokumenty dotyczące korzystania z terminala tutaj .


1
Proszę zostawić powód, jeśli zagłosujesz. Ten pakiet działa i działa dobrze.
user3751385,

9
nodejs to platforma serwera WWW. Nie należy polecać komuś krojenia chleba piłą łańcuchową.
maks.

23
node jest systemem skryptowym ogólnego przeznaczenia z powiązaniami CLI, czym to się różni od korzystania z Perla One-Liner lub czegoś takiego od CPAN?
Racheet

Naprawdę podoba mi się ta opcja, ale kiedy zmniejszę ją do mniejszej, nie wygląda to dobrze. Czy wiesz, czy wymagane jest coś dodatkowego, aby działało mniej?
plafratt

Ten pakiet psuje się, jeśli plik zawiera wiele kolumn (w szczególności więcej niż pozioma szerokość ekranu terminala jest w stanie obsłużyć) i nie wyrówna ich później.
gented

10

xsv to więcej niż przeglądarka. Polecam to do większości zadań CSV w wierszu poleceń, szczególnie w przypadku dużych zestawów danych.


9

Mój projekt FOSS CSVfix pozwala wyświetlać pliki CSV w formacie tabeli „ASCII art”.


Dokładnie tego szukałem. Będę musiał spróbować skompilować go dla OS X. (Być może pojawią się jakieś łatki, kto wie ...)
Benjamin Oakes,

Bardzo ich powitałbym. Jednym z nieco przygnębiających aspektów projektów FOSS jest to, jak niewiele osób faktycznie tworzy kod. Oczywiście jestem tak samo winny jak następna osoba.

Dlaczego Twój projekt CSVfix nie pozwala na przeglądanie repozytoriów? Utrudnianie innym osobom zobaczenia kodu nie zwiększa prawdopodobieństwa otrzymania wkładu, prawda?
Dirk Eddelbuettel,

1
Obawiam się, że z mojej strony zwykłe lenistwo. Ponadto podanie kodu zip oznacza, że ​​każdy może go uzyskać - gdybym tylko zapewnił dostęp do repozytorium, ludzie musieliby mieć zainstalowany SVM lub Hg. Jeśli zacznę otrzymywać łatki, ponownie się zastanowię.

Ostatnie zatwierdzenie 28-02-2028
Boris

8

Odpowiedź Ofri daje ci wszystko, o co prosiłeś. Ale .. jeśli nie chcesz pamiętać polecenia, możesz dodać to do swojego ~ / .bashrc (lub odpowiednika):

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

Jest to dokładnie to samo, co odpowiedź Ofri, tyle że owinąłem ją w funkcję powłoki i używam less -Sopcji zatrzymania zawijania linii (sprawia, że lesszachowuje się bardziej jak office / oocalc).

Otwórz nową powłokę (lub wpisz source ~/.bashrcswoją bieżącą powłokę) i uruchom polecenie, używając:

csview <filename>


5
To nie obsługuje przecinków w cytatach.
Cheng

7

Długo korzystałem z odpowiedzi pisswillis.

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

Ale potem połączyłem trochę kodu, który znalazłem na http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line, który działa lepiej dla mnie:

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

Powodem dla mnie jest to, że lepiej obsługuje szerokie kolumny.



3

Oto (prawdopodobnie zbyt) prosta opcja:

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

2
To była też moja pierwsza skłonność. Ale musisz wstawić wystarczającą liczbę kart, aby dopasować do najdłuższej wartości w kolumnie ... Zaczęło się trochę komplikować i pomyślałem: „ktoś inny już to zrobił”.
Benjamin Oakes,

2
Ignorujesz również fakt, że przecinki mogą być cytowane, a zatem nie są separatorami. (między innymi)
Ariel Allon


2

Napisałem ten plik csv_view.sh, aby sformatować pliki CSV z wiersza polecenia, to czyta cały plik, aby obliczyć optymalną szerokość każdej kolumny (wymaga perla, zakłada, że ​​nie ma przecinków w polach, używa również mniej):


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

Korzystając z TxtSushi możesz:

csvtopretty filename.csv | less -S

Głosuj za to, że nie jest to procedura instalacji w jednym wierszu. Nie mam czasu na skompilowanie tego :(. Jeśli mógłbyś dostarczyć pakiet, który byłby niesamowity.
masterxilo

@masterxilo to nie jest uzasadniony powód do głosowania. Wiele pakietów wymaga dziś kilku kroków. Ponadto instalacja prawdopodobnie byłaby szybsza niż napisanie komentarza.
Yuval Meshorer


2

Stworzyłem tablign do tych (i innych) celów. Zainstaluj za pomocą

[sudo -H] pip3 install tablign

i

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

Działa również, jeśli dane są oddzielone przez coś innego niż przecinki. Co najważniejsze, zachowuje ograniczniki, dzięki czemu można go również używać do stylizowania tabel ASCII bez poświęcania składni [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 zmieniłem nazwę na tablign. Naprawiono w opisie.
Nico Schlömer,

1
Idealnie, po prostu działa.
masterxilo,

0

W tym celu napisałem scenariusz, viewtab , w Groovy. Wywołujesz to w następujący sposób:

viewtab filename.csv

Jest to w zasadzie superlekki arkusz kalkulacyjny, który można wywoływać z wiersza poleceń, obsługuje pliki CSV i pliki rozdzielone tabulatorami, odczytuje BARDZO duże pliki, którymi dławią się Excel i Numbers, i jest bardzo szybki. To nie jest wiersz poleceń w tym sensie, że jest tylko tekstem, ale jest niezależny od platformy i prawdopodobnie będzie pasował do rachunku dla wielu osób szukających rozwiązania problemu szybkiego sprawdzania wielu lub dużych plików CSV podczas pracy w środowisku wiersza poleceń .

Skrypt i sposób jego instalacji opisano tutaj:

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


0

W python znajduje się krótki skrypt wiersza poleceń: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Wystarczy pobrać i umieścić na swojej ścieżce. Użycie jest jak

csv2ascii.py [options] csv-file-path

Konwertuj plik csv at csv-file-pathna formularz ascii zwracając wynik na standardowe wyjście. Jeśli csv-file-path= '-', to czytaj ze standardowego wejścia.

Opcje:

  -h, --help pokaż ten komunikat pomocy i wyjdź
  -w SZEROKOŚĆ, --width = SZEROKOŚĆ
                        Szerokość wyjścia ascii
  -c KOLUMNY, --columns = KOLUMNY
                        Wyświetlaj tylko tę liczbę kolumn
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.