Penampil CSV baris perintah? [Tutup]


308

Adakah yang tahu tentang penampil CSV baris perintah untuk Linux / OS X? Saya sedang memikirkan sesuatu seperti lesstapi itu menghilangkan kolom dengan cara yang lebih mudah dibaca. (Saya akan baik-baik saja dengan membukanya dengan OpenOffice Calc atau Excel, tapi itu terlalu dikuasai untuk hanya melihat data seperti yang saya perlukan.) Memiliki pengguliran horizontal dan vertikal akan sangat bagus.


Karena saya tidak bisa memberikan jawaban: SC-IM adalah penampil dan editor CLI untuk tabel yang juga dapat membuka CSV. github.com/andmarti1424/sc-im
12431234123412341234123

Jawaban:


441

Anda juga dapat menggunakan ini:

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

column adalah program unix standar yang sangat nyaman - ia menemukan lebar yang sesuai dari setiap kolom, dan menampilkan teks sebagai tabel yang diformat dengan baik.

Catatan: setiap kali Anda memiliki bidang kosong, Anda harus memasukkan semacam placeholder di dalamnya, jika tidak kolom akan digabung dengan kolom berikut. Contoh berikut menunjukkan cara menggunakan seduntuk memasukkan placeholder:

$ 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

Perhatikan bahwa penggantian ,,untuk , ,dilakukan dua kali. Jika Anda melakukannya hanya sekali, 1,,,4akan menjadi 1, ,,4sejak koma kedua sudah cocok.


2
Saya sangat suka opsi ini - itu baik untuk diketahui column. Saya akhirnya membuat ini skrip shell pendek (sebagian besar adalah boilerplate "bagaimana saya menggunakannya?" Dan kode pemeriksaan kesalahan). github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes

24
Versi 'Debian GNU / Linux' kolom memiliki opsi '-n': "Secara default, perintah kolom akan menggabungkan beberapa pembatas yang berdekatan menjadi pembatas tunggal saat menggunakan opsi -t; opsi ini menonaktifkan perilaku itu. Opsi ini ekstensi Debian GNU / Linux. "
klokop

5
Tampaknya rusak jika Anda memiliki nilai kolom (dikutip) dengan koma di dalamnya. Adakah cara untuk memperbaikinya?
TM.

3
dari 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
Sayangnya, jika suatu nilai mengandung koma, ia akan dipecah walaupun dikutip.
ffarquet

107

Anda dapat menginstal csvtool(di Ubuntu) melalui

sudo apt-get install csvtool

lalu jalankan:

csvtool readable filename | view -

Ini akan membuatnya bagus dan cantik di dalam instance vim read-only, bahkan jika Anda memiliki beberapa sel dengan nilai yang sangat panjang.


2
Bagi mereka yang tidak menggunakan distro berbasis Debian, alat ini tampaknya berasal dari sini: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz Sayangnya tautan "beranda" sudah mati, dan saya tidak dapat melihat cara mudah untuk mengunduh seluruh arsip dalam perjalanan.
cincodenada

9
Alat ini tidak dapat menangani file dengan 100
MB

6
Alat ini tersedia dari ocaml-csvpaket baseuntuk saya di Centos7
Bryce

72

Lihatlah csvkit . Ini menyediakan seperangkat alat yang mematuhi filosofi UNIX (artinya mereka kecil, sederhana, bertujuan tunggal dan dapat digabungkan).

Berikut adalah contoh yang mengekstrak sepuluh kota terpadat di Jerman dari basis data Maxmind World Cities gratis dan menampilkan hasilnya dalam format yang dapat dibaca konsol:

$ 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 adalah platform independen karena ditulis dalam Python.


1
Berfungsi bagus di MAC saya. Sangat berguna untuk membaca file besar.
James Lim

4
Saya suka Csvkit. csvlook <filename.csv> | less -S
Sandeep

5
Untuk mendapatkan csvkit Anda hanya bisa pip menginstalnya: pip install csvkit. Nikmati!
gloriphobia

46

Tabview: light python curses command line viewer file CSV (dan juga data Python tabular lainnya, seperti daftar daftar) ada di sini di Github

Fitur:

  • Python 2.7+, 3.x
  • Dukungan Unicode
  • Tampilan seperti spreadsheet untuk memvisualisasikan data tabular dengan mudah
  • Navigasi seperti Vim (h, j, k, l, g (atas), G (bawah), garis 12G goto 12, m - tanda, '- tanda goto, dll.)
  • Alihkan baris tajuk yang persisten
  • Mengubah ukuran lebar dan celah kolom secara dinamis
  • Sortir naik atau turun dengan kolom apa saja. Urutan urutan 'Alami' untuk nilai numerik.
  • Pencarian teks lengkap, n dan p untuk menggilir antara hasil pencarian
  • 'Enter' untuk melihat konten sel lengkap
  • Isi sel Yank ke clipboard
  • F1 atau? untuk pengikat kunci
  • Dapat juga menggunakan dari baris perintah python untuk memvisualisasikan data tabular apa pun (mis. Daftar-daftar-daftar)

1
Alat hebat. Membuka file besar yang membuat crash csvtool dan openoffice. Sangat cepat juga.
Leonardo

Setelah 'pip install tabview' di windows berhasil, bagaimana cara saya meluncurkan program? Saya dapat menggunakan 'tabview file.csv' di linux dengan sukses, tetapi windows sepertinya tidak berfungsi. Terima kasih!
Chris

Saya tidak percaya modul kutukan tersedia di Windows. Maaf! Mungkin ada modul pihak ketiga yang tersedia, tetapi saya belum melakukan pengembangan untuk Windows.
Scott Hansen

Terima kasih atas penjelasannya! Ini adalah alat yang luar biasa!
Chris

1
@CiroSantilli 烏坎 事件 2016 六四 事件 法轮功, sayangnya belum. Saya berharap untuk meluangkan waktu sebentar di tabview ... agak tidak aktif untuk sementara waktu di sini. :(
Scott Hansen


22

Paket nodejs tecfu / tty-table dapat diinstal secara global untuk melakukan hal ini:

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

tecfu / tty-table

Itu juga dapat menangani stream.

Untuk info lebih lanjut, lihat dokumen untuk penggunaan terminal di sini .


1
Silakan tinggalkan alasan jika Anda downvote. Paket ini berfungsi dan bekerja dengan baik.
user3751385

9
nodejs adalah platform server web. Anda sebaiknya tidak merekomendasikan seseorang untuk memotong roti dengan gergaji mesin.
Maks.

23
simpul adalah sistem scripting tujuan umum dengan binding CLI, bagaimana bedanya dengan menggunakan perl one-liner atau sesuatu dari CPAN?
Racheet

Saya sangat suka opsi ini, tetapi ketika saya pipa ke kurang, itu tidak beres. Apakah Anda tahu jika sesuatu yang ekstra diperlukan untuk membuatnya bekerja dengan lebih sedikit?
plafrat

Paket ini rusak jika file berisi banyak kolom (khususnya lebih dari lebar horisontal layar terminal dapat menangani) dan tidak menyelaraskannya dengan benar setelahnya.
gented

10

xsv lebih dari sekedar penonton. Saya merekomendasikannya untuk sebagian besar tugas CSV di baris perintah, terutama ketika berhadapan dengan kumpulan data besar.


9

CSVfix proyek FOSS saya memungkinkan Anda menampilkan file CSV dalam format tabel "ASCII art".


Persis apa yang saya cari. Aku harus coba kompilasi untuk OS X. (Anda mungkin memiliki beberapa patch datang dengan cara Anda, siapa tahu ...)
Benjamin Oakes

Saya sangat menyambut mereka. Satu opf aspek yang agak menyedihkan dari proyek FOSS adalah bagaimana sedikit orang yang benar-benar berkontribusi kode. Tentu saja, saya sama bersalahnya dengan orang berikutnya.

Mengapa proyek CSVfix Anda tidak mengizinkan penelusuran repo? Menyulitkan orang lain untuk melihat kode tidak membuat Anda mendapat kontribusi lebih besar, bukan?
Dirk Eddelbuettel

1
Kemalasan belaka di pihak saya, saya takut. Juga, memberikan kode pos berarti siapa pun bisa mendapatkannya - jika saya hanya memberikan akses repo, orang harus menginstal SVM atau Hg. Jika saya mulai menerima tambalan, saya akan mempertimbangkan kembali.

Komit terakhir pada 2015-02-02
Boris

8

Jawaban Ofri memberi Anda semua yang Anda minta. Tapi .. jika Anda tidak ingin mengingat perintah Anda dapat menambahkan ini ke ~ / .bashrc Anda (atau yang setara):

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

Ini persis sama dengan jawaban Ofri kecuali saya telah membungkusnya dalam fungsi shell dan saya menggunakan less -Sopsi untuk menghentikan pembungkus garis (membuat lessberperilaku lebih seperti kantor / oocalc).

Buka shell baru (atau ketik source ~/.bashrcshell Anda saat ini) dan jalankan perintah menggunakan:

csview <filename>


5
Ini tidak menangani koma dalam kutipan.
Cheng

7

Saya menggunakan jawaban pisswillis untuk waktu yang lama.

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

Tetapi kemudian menggabungkan beberapa kode yang saya temukan di http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line yang berfungsi lebih baik untuk saya:

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

Alasan kerjanya lebih baik bagi saya adalah bahwa ia menangani kolom lebar dengan lebih baik.



3

Inilah opsi (mungkin juga) sederhana:

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

2
Itu juga kecenderungan pertama saya. Tetapi Anda harus memasukkan tab yang cukup untuk mencocokkan nilai terpanjang untuk kolom Anda ... Mulai menjadi sedikit rumit dan saya pikir "orang lain pasti sudah melakukan ini."
Benjamin Oakes

2
Anda juga mengabaikan fakta bahwa koma mungkin dikutip dan karenanya bukan pemisah. (antara lain)
Ariel Allon


2

Saya menulis csv_view.sh ini untuk memformat CSV dari baris perintah, ini membaca seluruh file untuk mengetahui lebar optimal setiap kolom (perlu perl, anggap tidak ada koma di bidang, juga menggunakan lebih sedikit):


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

Menggunakan TxtSushi dapat Anda lakukan:

csvtopretty filename.csv | less -S

Downvote karena tidak menjadi prosedur instalasi satu baris. Saya tidak punya waktu untuk mengkompilasi ini :(. Jika Anda bisa memberikan paket yang akan luar biasa.
masterxilo

@masterxilo itu bukan alasan yang sah untuk melakukan downvote. Banyak paket saat ini membutuhkan beberapa langkah untuk menginstal. Plus, mungkin akan lebih cepat menginstal daripada menulis komentar.
Yuval Meshorer


2

Saya telah membuat tablign untuk tujuan ini (dan lainnya). Instal dengan

[sudo -H] pip3 install tablign

dan

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

Juga berfungsi jika data dipisahkan oleh sesuatu selain koma. Yang paling penting, ini menjaga pembatas sehingga Anda juga dapat menggunakannya untuk menata tabel ASCII Anda tanpa mengorbankan sintaks [Markdown, CSV, LaTeX] Anda.


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

@ masterxilo saya telah menamainya menjadi tablign. Diperbaiki dalam deskripsi.
Nico Schlömer

1
Sempurna, hanya berfungsi.
masterxilo

0

Saya menulis naskah, viewtab , di Groovy hanya untuk tujuan ini. Anda memohon seperti:

viewtab filename.csv

Ini pada dasarnya adalah spreadsheet super-ringan yang dapat dipanggil dari baris perintah, menangani CSV dan file-file yang dipisahkan tab, dapat membaca file SANGAT besar yang dicekik Excel dan Numbers, dan sangat cepat. Ini bukan baris perintah dalam arti hanya teks, tetapi platform independen dan mungkin akan sesuai dengan tagihan bagi banyak orang yang mencari solusi untuk masalah dengan cepat memeriksa banyak atau file CSV besar saat bekerja di lingkungan baris perintah .

Script dan cara menginstalnya dijelaskan di sini:

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


0

Ada skrip baris perintah pendek ini dalam python: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Cukup unduh dan letakkan di jalur Anda. Penggunaannya seperti

csv2ascii.py [options] csv-file-path

Konversikan file csv di csv-file-pathke ascii dari mengembalikan hasil pada stdout. Jika csv-file-path= '-' maka baca dari stdin.

Pilihan:

  -h, --help tampilkan pesan bantuan ini dan keluar
  -w WIDTH, --width = WIDTH
                        Lebar keluaran ascii
  -c COLUMNS, --columns = COLUMNS
                        Hanya tampilkan jumlah kolom ini
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.