Komut satırı CSV görüntüleyicisi? [kapalı]


308

Linux / OS X için bir komut satırı CSV görüntüleyici bilen var mı? Ben böyle bir şey düşünüyorum lessama sütunları daha okunaklı bir şekilde boşluk. (OpenOffice Calc veya Excel ile açarken iyi olurum, ancak bu sadece ihtiyacım olan verilere bakmak için çok fazla güçlendi .) Yatay ve dikey kaydırma yapmak harika olurdu.


Bir cevap veremediğim için: SC-IM, CSV'yi de açabilen tablolar için bir CLI görüntüleyici ve düzenleyicisidir. github.com/andmarti1424/sc-im
12431234123412341234123

Yanıtlar:


441

Bunu da kullanabilirsiniz:

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

column çok uygun olan standart bir unix programıdır - her sütunun uygun genişliğini bulur ve metni güzel biçimlendirilmiş bir tablo olarak görüntüler.

Not: Boş alanlarınız olduğunda, içine bir tür yer tutucu koymanız gerekir, aksi takdirde sütun aşağıdaki sütunlarla birleştirilir. Aşağıdaki örnek, sedyer tutucu eklemek için nasıl kullanılacağını gösterir:

$ 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

İkamesi unutmayın ,,için , ,iki kez yapılır. Sadece bir kez yaparsanız , ikinci virgül zaten eşleştiğinden beri 1,,,4olacaktır 1, ,,4.


2
Bu seçeneği gerçekten seviyorum - bilmek güzel column. Bu kısa bir kabuk komut dosyası yapma sona erdi (çoğu boilerplate "nasıl kullanırım?" Ve hata kontrol kodu). github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes

24
Sütunun 'Debian GNU / Linux' sürümü '-n' seçeneğine sahiptir: "Varsayılan olarak, sütun komutu -t seçeneğini kullanırken birden çok bitişik ayırıcıyı tek bir ayırıcıda birleştirir; bu seçenek bu davranışı devre dışı bırakır. Debian GNU / Linux uzantısı. "
klokop

5
İçlerinde virgül bulunan (tırnak işareti alınmış) sütun değerleriniz varsa kırılıyor gibi görünüyor. Bunu nasıl düzeltebileceğine dair bir fikrin var mı?
TM.

3
itibaren 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
Ne yazık ki bir değer virgül içeriyorsa, tırnak içine alınmış olsa bile bölünür.
ffarquet

107

Sen yükleyebilirsiniz csvtoolaracılığı (Ubuntu)

sudo apt-get install csvtool

ve sonra çalıştırın:

csvtool readable filename | view -

Bu, çok uzun değerlere sahip bazı hücreleriniz olsa bile, salt okunur bir vim örneğinin içinde güzel ve güzel hale getirecektir.


2
Debian tabanlı dağıtımlarda bulunmayanlar için bu araç buradan geliyor gibi görünüyor: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz Ne yazık ki "ana sayfa" bağlantısı öldü ve ben bir kerede tüm arşivi indirmenin kolay bir yolunu görmüyorum.
cincodenada

9
Araç 100Mb + ile dosyaları
işleyemiyor

6
Bu araç, benim için Centos7ocaml-csvbase
Bryce Guinta'da

72

Csvkit'e bir göz atın . UNIX felsefesine uygun bir dizi araç sağlar (yani küçük, basit, tek amaçlıdır ve birleştirilebilir).

İşte Almanya'daki en kalabalık on şehri ücretsiz Maxmind World Cities veritabanından ayıklayan ve sonucu konsol tarafından okunabilir biçimde gösteren bir örnek:

$ 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 platformdan bağımsızdır, çünkü Python ile yazılmıştır.


1
MAC bilgisayarımda harika çalışıyor. Büyük dosyaları okumak için çok kullanışlıdır.
James Lim

4
Csvkit'i seviyorum. csvlook <dosyaadı.csv> | daha az -S
Sandeep

5
Csvkit almak için sadece pip yükleyebilirsiniz: pip install csvkit. Zevk almak!
gloriphobia

46

Tabview: hafif python curses komut satırı CSV dosya görüntüleyici (ve ayrıca liste listesi gibi diğer tablo Python verileri) Github'da

Özellikleri:

  • Python 2.7+, 3.x
  • Unicode desteği
  • Sekmeli verileri kolayca görselleştirmek için elektronik tablo benzeri görünüm
  • Vim benzeri gezinme (h, j, k, l, g (üst), G (alt), 12G git satırı 12, m - işareti, '- git işareti vb.)
  • Kalıcı başlık satırını aç / kapat
  • Sütun genişliklerini ve boşluğunu dinamik olarak yeniden boyutlandırma
  • Herhangi bir sütuna göre artan veya azalan düzende sıralayın. Sayısal değerler için 'Doğal' sipariş sıralaması.
  • Tam metin araması, arama sonuçları arasında geçiş yapmak için n ve p
  • Tüm hücre içeriğini görüntülemek için 'Enter'
  • Hücre içeriklerini panoya aktar
  • F1 veya? tuş takımları için
  • Herhangi bir sekmeli veriyi (örn. Liste listesi) görselleştirmek için python komut satırından da kullanılabilir

1
Harika bir araç. Csvtool ve openoffice'i çökerten büyük bir dosya açtı. Çok hızlı.
Leonardo

Windows'ta 'pip install tabview' den sonra programı nasıl başlatabilirim? Linux'ta 'tabview file.csv' dosyasını başarıyla kullanabilirim, ancak pencereler çalışmıyor gibi görünüyor. Teşekkürler!
Chris

Lanetler modülünün Windows üzerinde mevcut olduğuna inanmıyorum. Afedersiniz! Kullanılabilir bir üçüncü taraf modülü olabilir, ancak Windows için herhangi bir geliştirme yapmadım.
Scott Hansen

Açıklama için teşekkürler! Bu harika bir araç parçası!
Chris

1
@CiroSantilli 烏坎 事件 2016 六四 事件 法轮功, ne yazık ki henüz değil. Yakında tabview'e biraz zaman ayırmayı umuyorum ... bir süredir oldukça uykudaydı. :(
Scott Hansen


22

Kesin olarak bunu yapmak için nodejs paketi tecfu / tty-table global olarak kurulabilir:

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

tecfu / TTY masa

Ayrıca akışları da işleyebilir.

Daha fazla bilgi için, burada terminal kullanımına ilişkin belgelere bakın .


1
Lütfen aşağı inerseniz bir neden bırakın. Bu paket iyi çalışıyor ve iyi çalışıyor.
user3751385

9
nodejs bir web sunucusu platformudur. Birisine elektrikli testere ile ekmek kesmesini önermemelisiniz.
maks.

23
düğümü CLI bağlamaları olan genel amaçlı bir betik sistemidir, perl tek katmanlı veya CPAN'dan başka bir şey kullanmanın farkı nedir?
Racheet

Bu seçeneği gerçekten seviyorum, ancak daha az borsa yaptığımda doğru görünmüyor. Daha azıyla çalışması için fazladan bir şeyin gerekli olup olmadığını biliyor musunuz?
plafratt

Dosyada çok sayıda sütun varsa (özellikle terminal ekranının yatay genişliğinin işleyebileceğinden daha fazla) ve daha sonra bunları düzgün hizalamıyorsa bu paket kırılır.
gented

10

xsv bir izleyiciden daha fazlasıdır. Komut satırındaki çoğu CSV görevi için, özellikle büyük veri kümeleriyle uğraşırken bunu öneriyorum.


9

FOSS projem CSVfix , CSV dosyalarını "ASCII art" tablo biçiminde görüntülemenizi sağlar.


Tam aradığım şey. OS X için derlemeyi denemeliyim. (Yoluna çıkan bazı yamalar olabilir, kim bilir ...)
Benjamin Oakes

Onları çok memnuniyetle karşılarım. FOSS projelerinin biraz iç karartıcı yönlerinden biri, aslında kodun ne kadar az kişinin katkıda bulunduğu. Tabii ki, bundan sonraki kişi kadar suçluyum.

CSVfix projeniz neden repo taramasına izin vermiyor? Başkalarının kodu görmesini zorlaştırmak, katkı alma olasılığınızı artırmaz, değil mi?
Dirk Eddelbuettel

1
Korkarım tembellik. Ayrıca, kodun bir zipini sağlamak herkesin alabileceği anlamına gelir - sadece repo erişimi sağlasam, insanların SVM veya Hg'nin yüklü olması gerekir. Yama almaya başlarsam, tekrar düşünürdüm.

Son taahhüt 2015‑02‑28
Boris

8

Ofri'nin cevabı size istediğiniz her şeyi veriyor. Ancak .. komutu hatırlamak istemiyorsanız, bunu ~ / .bashrc (veya dengi) cihazınıza ekleyebilirsiniz:

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

Bu, Ofri'nin cevabı ile tam olarak aynıdır, ancak bir kabuk işlevine sarmıştım ve less -Sçizgilerin sarılmasını durdurmak için seçeneği kullanıyorum ( lessbir ofis / oocalc gibi davranıyor).

Yeni bir kabuk açın (veya source ~/.bashrcgeçerli kabuğunuzu yazın) ve komutu kullanarak şunları çalıştırın:

csview <filename>


5
Bu, alıntılarda virgül kullanmaz.
Cheng

7

Uzun süre pisswillis'in cevabını kullandım.

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

Ama sonra http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line adresinde bulduğum ve benim için daha iyi çalışan bazı kodları birleştirdim :

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

Benim için daha iyi çalışmasının nedeni geniş sütunları daha iyi işlemesidir.



3

İşte (muhtemelen de) basit bir seçenek:

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

2
Bu benim ilk eğilimimdi. Ancak, sütununuz için en uzun değere uyacak kadar sekme eklemelisiniz ... Biraz karmaşıklaşmaya başladım ve "başkası bunu zaten yapmış olmalı" diye düşündüm.
Benjamin Oakes

2
Ayrıca, virgüllerin tırnak içine alınabileceğini ve bu nedenle ayırıcıların olmadığını da görmezden geliyorsunuz. (diğer şeylerin yanı sıra)
Ariel Allon


2

Komut satırından CSV'leri biçimlendirmek için bu csv_view.sh yazdım, bu her sütunun en uygun genişliğini bulmak için tüm dosyayı okur (perl gerektirir, alanlarda virgül olmadığını varsayar, daha az kullanır):


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

TxtSushi'yi kullanarak şunları yapabilirsiniz:

csvtopretty filename.csv | less -S

Tek satırlık yükleme prosedürü olmadığından aşağı oy verin. Bunu derlemek için zamanım yok :(. Harika olacak bir paket sağlayabilirseniz.
masterxilo

@masterxilo bu, aşağı oy için geçerli bir neden değil. Bugün birçok paketin yüklenmesi için birkaç adım gerekiyor. Ayrıca, yüklemek yorum yazmaktan daha hızlı olacaktır.
Yuval Meshorer


2

Bu (ve diğer) amaçlar için tablign oluşturdum . İle yükle

[sudo -H] pip3 install tablign

ve

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

Veriler virgül dışında bir şeyle ayrılırsa da çalışır. En önemlisi, sınırlayıcıları korur , böylece [Markdown, CSV, LaTeX] sözdiziminizden ödün vermeden ASCII tablolarınızı biçimlendirmek için de kullanabilirsiniz.


Collecting tablify Could not find a version that satisfies the requirement tablify (from versions: ) No matching distribution found for tablify
masterxilo

@masterxilo adını değiştirdim tablign. Açıklamasında düzeltildi.
Nico Schlömer

1
Mükemmel, sadece çalışıyor.
masterxilo

0

Sadece bu amaçla Groovy'de bir senaryo, viewtab yazdım . Şöyle çağırıyorsunuz:

viewtab filename.csv

Temel olarak komut satırından çağrılabilen, CSV ve sekmeyle ayrılmış dosyaları işleyebilen, Excel ve Numbers'ın boğduğu ÇOK büyük dosyaları okuyabilen ve çok hızlı olan süper hafif bir elektronik tablodur. Yalnızca metin olma anlamında komut satırı değildir, ancak platformdan bağımsızdır ve muhtemelen bir komut satırı ortamında çalışırken çok sayıda veya büyük CSV dosyasını hızlı bir şekilde denetleme sorununa bir çözüm arayan birçok kişi için faturaya uyacaktır. .

Komut dosyası ve nasıl yükleneceği burada açıklanmaktadır:

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


0

Python'da şu kısa komut satırı komut dosyası var: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Sadece indirin ve yolunuza yerleştirin. Kullanım gibi

csv2ascii.py [options] csv-file-path

csv-file-pathSts üzerinde sonucu döndüren csv dosyasını ascii formuna dönüştürün . Eğer csv-file-path= '-' sonra stdin'den okuyun.

Seçenekler:

  -h, --help bu yardım mesajını göster ve çık
  -w WIDTH, --width = WIDTH
                        ASCII çıktı genişliği
  -c SÜTUNLAR, - sütunlar = SÜTUNLAR
                        Yalnızca bu sütun sayısını göster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.