Trình xem dòng lệnh CSV? [đóng cửa]


308

Bất cứ ai cũng biết về trình xem CSV dòng lệnh cho Linux / OS X? Tôi đang nghĩ về một cái gì đó giống như lessnhưng không gian đó ra khỏi các cột theo cách dễ đọc hơn. (Tôi sẽ ổn khi mở nó bằng OpenOffice Calc hoặc Excel, nhưng điều đó quá sức vì chỉ nhìn vào dữ liệu như tôi cần.) Có cuộn ngang và cuộn dọc sẽ rất tuyệt.


Vì tôi không thể đưa ra câu trả lời: SC-IM là trình xem và trình chỉnh sửa CLI cho các bảng cũng có thể mở CSV. github.com/andmarti1424/sc-im
12431234123412341234123

Câu trả lời:


441

Bạn cũng có thể sử dụng điều này:

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

column là một chương trình unix tiêu chuẩn rất thuận tiện - nó tìm thấy chiều rộng phù hợp của mỗi cột và hiển thị văn bản dưới dạng bảng được định dạng độc đáo.

Lưu ý: bất cứ khi nào bạn có các trường trống, bạn cần đặt một số loại giữ chỗ trong đó, nếu không cột sẽ được hợp nhất với các cột sau. Ví dụ sau minh họa cách sử dụng sedđể chèn giữ chỗ:

$ 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

Lưu ý rằng việc thay thế ,,cho , ,được thực hiện hai lần. Nếu bạn làm điều đó chỉ một lần, 1,,,4sẽ trở thành 1, ,,4vì dấu phẩy thứ hai đã được khớp.


2
Tôi thực sự thích tùy chọn này - thật tốt khi biết về nó column. Cuối cùng tôi đã biến nó thành một kịch bản shell ngắn (hầu hết là kịch bản "tôi sử dụng nó như thế nào?" Và kiểm tra lỗi mã). github.com/benjaminoakes/utilities/blob/master/view-csv
Benjamin Oakes

24
Phiên bản cột 'Debian GNU / Linux' có tùy chọn '-n': "Theo mặc định, lệnh cột sẽ hợp nhất nhiều dấu phân cách liền kề thành một dấu phân cách khi sử dụng tùy chọn -t; tùy chọn này vô hiệu hóa hành vi đó. Tùy chọn này là một phần mở rộng Debian GNU / Linux. "
klokop

5
Nó dường như bị phá vỡ nếu bạn có các giá trị cột (được trích dẫn) với dấu phẩy trong đó. Bất kỳ ý tưởng làm thế nào để khắc phục điều này?
TM.

3
từ 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
Thật không may nếu một giá trị chứa dấu phẩy, nó sẽ bị chia ngay cả khi nó được trích dẫn.
ffarquet

107

Bạn có thể cài đặt csvtool(trên Ubuntu) thông qua

sudo apt-get install csvtool

và sau đó chạy:

csvtool readable filename | view -

Điều này sẽ làm cho nó đẹp và đẹp bên trong một ví dụ vim chỉ đọc, ngay cả khi bạn có một số ô có giá trị rất dài.


2
Đối với những người không ở trên các bản phân phối cơ sở Debian, công cụ này dường như bắt nguồn từ đây: docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz Thật không may, liên kết "trang chủ" đã chết và tôi không Tôi không thấy một cách dễ dàng để tải xuống toàn bộ kho lưu trữ.
cincodenada

9
Công cụ không thể xử lý các tệp với 100Mb +
PedroSena

6
Công cụ này có sẵn từ ocaml-csvgói basedành cho tôi trong Centos7
Bryce Guinta

72

Có một cái nhìn tại csvkit . Nó cung cấp một tập hợp các công cụ tuân thủ triết lý UNIX (có nghĩa là chúng nhỏ, đơn giản, đơn mục đích và có thể được kết hợp).

Dưới đây là một ví dụ trích xuất mười thành phố đông dân nhất ở Đức từ cơ sở dữ liệu Maxmind World City miễn phí và hiển thị kết quả theo định dạng có thể đọc được bằng bàn điều khiển:

$ 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 là nền tảng độc lập vì nó được viết bằng Python.


1
Hoạt động tuyệt vời trên MAC của tôi. Rất hữu ích để đọc các tập tin lớn.
James Lim

4
Tôi thích Csvkit. csvlook <filename.csv> | ít hơn -S
Sandeep

5
Để có được csvkit, bạn chỉ cần cài đặt nó : pip install csvkit. Thưởng thức!
gloriphobia

46

Tabview: python nhẹ nguyền rủa trình xem tệp CSV dòng lệnh (và cả dữ liệu Python dạng bảng khác, như danh sách danh sách) có ở đây trên Github

Đặc trưng:

  • Python 2.7+, 3.x
  • Hỗ trợ Unicode
  • Chế độ xem giống như bảng tính để dễ dàng hiển thị dữ liệu dạng bảng
  • Điều hướng giống như Vim (h, j, k, l, g (trên cùng), G (dưới cùng), 12G goto dòng 12, m - mark, '- goto mark, v.v.)
  • Chuyển đổi hàng tiêu đề liên tục
  • Tự động thay đổi kích thước chiều rộng và khoảng cách cột
  • Sắp xếp tăng dần hoặc giảm dần theo bất kỳ cột. Sắp xếp thứ tự 'tự nhiên' cho các giá trị số.
  • Tìm kiếm toàn văn, n và p để xoay vòng giữa các kết quả tìm kiếm
  • 'Enter' để xem nội dung ô đầy đủ
  • Nội dung ô Yank vào clipboard
  • F1 hay? cho keybindings
  • Cũng có thể sử dụng từ dòng lệnh python để trực quan hóa bất kỳ dữ liệu dạng bảng nào (ví dụ: list-of-list)

1
Công cụ tuyệt vời. Đã mở một tập tin khổng lồ bị sập csvtool và openoffice. Rất nhanh quá.
Leonardo

Sau khi 'pip cài đặt tabview' trên windows thành công, làm cách nào để khởi chạy chương trình? Tôi có thể sử dụng 'tabview file.csv' trên linux thành công, nhưng các cửa sổ dường như không hoạt động. Cảm ơn!
Chris

Tôi không tin rằng mô-đun lời nguyền có sẵn trên Windows. Lấy làm tiếc! Có thể có một mô-đun bên thứ ba có sẵn nhưng tôi chưa thực hiện bất kỳ sự phát triển nào cho Windows.
Scott Hansen

Cám ơn vì đã giải thích! Nó là một phần tuyệt vời của công cụ sau đó!
Chris

1
@CiroSantilli 2016 六四 事件, tiếc là chưa. Tôi hy vọng sẽ sớm dành thời gian để xem tab ... nó khá im lìm trong một thời gian ở đây. :(
Scott Hansen


22

Gói tecfu / tty-bảng của nodejs có thể được cài đặt trên toàn cầu để thực hiện chính xác điều này:

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

tecfu / tty-bàn

Nó cũng có thể xử lý các luồng.

Để biết thêm thông tin, xem tài liệu để sử dụng thiết bị đầu cuối ở đây .


1
Vui lòng để lại một lý do nếu bạn downvote. Gói này hoạt động và hoạt động tốt.
dùng3751385

9
nodejs là một nền tảng máy chủ web. Bạn không nên đề nghị ai đó cắt bánh mì bằng cưa máy.
tối đa

23
nút là một hệ thống kịch bản mục đích chung với các ràng buộc CLI, nó khác với việc sử dụng một lớp lót perl hoặc một cái gì đó từ CPAN như thế nào?
Racheet

Tôi thực sự thích tùy chọn này, nhưng khi tôi đưa nó xuống ít hơn, nó không đúng. Bạn có biết nếu cần thêm một cái gì đó để làm cho nó hoạt động với ít hơn?
plafratt

Gói này bị hỏng nếu tệp chứa nhiều cột (đặc biệt là nhiều hơn chiều rộng ngang của màn hình đầu cuối có thể xử lý) và không căn chỉnh chúng đúng cách sau đó.
gạc

10

xsv không chỉ là người xem. Tôi khuyên dùng nó cho hầu hết các tác vụ CSV trên dòng lệnh, đặc biệt là khi xử lý các bộ dữ liệu lớn.


9

CSVfix dự án FOSS của tôi cho phép bạn hiển thị các tệp CSV ở định dạng bảng "nghệ thuật ASCII".


Chính xác những gì tôi đang tìm kiếm. Tôi sẽ phải thử biên dịch nó cho OS X. (Bạn có thể có một số bản vá theo cách của mình, ai biết được ...)
Benjamin Oakes

Tôi rất hoan nghênh họ. Một trong những khía cạnh hơi thất vọng của các dự án FOSS là làm thế nào ít người thực sự đóng góp mã. Tất nhiên, tôi có tội với điều này như người tiếp theo.

Tại sao dự án CSVfix của bạn không cho phép duyệt lại? Làm cho người khác khó nhìn thấy mã hơn không làm cho bạn có nhiều khả năng nhận được đóng góp hơn, phải không?
Dirk Eddelbuettel

1
Về phần tôi, tôi rất sợ. Ngoài ra, việc cung cấp một mã zip có nghĩa là bất kỳ ai cũng có thể nhận được nó - nếu tôi chỉ cung cấp quyền truy cập repo, mọi người sẽ phải cài đặt SVM hoặc Hg. Nếu tôi bắt đầu nhận được các bản vá, tôi sẽ xem xét lại.

Cam kết cuối cùng vào 201502‑28
Boris

8

Câu trả lời của Ofri cho bạn mọi thứ bạn yêu cầu. Nhưng .. nếu bạn không muốn nhớ lệnh, bạn có thể thêm lệnh này vào ~ / .bashrc (hoặc tương đương):

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

Điều này hoàn toàn giống với câu trả lời của Ofri ngoại trừ tôi đã bọc nó trong hàm shell và đang sử dụng less -Stùy chọn để dừng việc ngắt dòng (làm cho lesshành vi giống như văn phòng / oocalc).

Mở một shell mới (hoặc gõ source ~/.bashrcvào shell hiện tại của bạn) và chạy lệnh bằng cách sử dụng:

csview <filename>


5
Điều này không xử lý dấu phẩy trong trích dẫn.
Cheng

7

Tôi đã sử dụng câu trả lời của pisswillis trong một thời gian dài.

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

Nhưng sau đó kết hợp một số mã tôi tìm thấy tại http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line hoạt động tốt hơn đối với tôi:

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

Lý do nó hoạt động tốt hơn đối với tôi là nó xử lý các cột rộng tốt hơn.



3

Đây là một tùy chọn đơn giản (có lẽ cũng vậy):

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

2
Đó cũng là thiên hướng đầu tiên của tôi. Nhưng bạn phải chèn đủ các tab để khớp với giá trị dài nhất cho cột của bạn ... Bắt đầu hơi phức tạp và tôi nghĩ rằng "ai đó phải đã làm điều này rồi".
Benjamin Oakes

2
Bạn cũng bỏ qua thực tế là dấu phẩy có thể được trích dẫn và do đó không phải là dấu phân cách. (trong số những thứ khác)
Ariel Allon

3

Một công cụ thao tác CSV đa chức năng (và không chỉ) khác: Miller . Từ mô tả của chính nó, nó giống như awk, sed, cắt, nối và sắp xếp cho dữ liệu được lập chỉ mục tên như CSV, TSV và JSON dạng bảng. (liên kết đến kho lưu trữ github: https://github.com/johnkerl/miller )


2

Tôi đã viết csv_view.sh này để định dạng CSV từ dòng lệnh, phần này đọc toàn bộ tệp để tìm ra chiều rộng tối ưu của mỗi cột (yêu cầu perl, giả sử không có dấu phẩy trong các trường, cũng sử dụng ít hơn):


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

Sử dụng TxtSushi bạn có thể làm:

csvtopretty filename.csv | less -S

Downvote không phải là một thủ tục cài đặt một dòng. Tôi không có thời gian để biên dịch cái này :(. Nếu bạn có thể cung cấp một gói sẽ tuyệt vời.
masterxilo

@masterxilo đó không phải là lý do hợp lệ để downvote. Nhiều gói ngày nay yêu cầu một số bước để cài đặt. Thêm vào đó, nó có thể sẽ nhanh hơn để cài đặt hơn là viết bình luận.
Yuval


2

Tôi đã tạo tablign cho các mục đích này (và các mục đích khác). Cài đặt với

[sudo -H] pip3 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 ,

Cũng hoạt động nếu dữ liệu được phân tách bằng một cái gì đó ngoài dấu phẩy. Quan trọng nhất, nó bảo tồn các dấu phân cách để bạn cũng có thể sử dụng nó để định kiểu các bảng ASCII của mình mà không phải hy sinh cú pháp [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 Tôi đã đổi tên thành tablign. Đã sửa trong mô tả.
Nico Schlömer

1
Hoàn hảo, chỉ hoạt động.
masterxilo

0

Tôi đã viết một kịch bản, viewtab , trong Groovy cho mục đích này. Bạn gọi nó như sau:

viewtab filename.csv

Về cơ bản, đây là một bảng tính siêu nhẹ, có thể được gọi từ dòng lệnh, xử lý các tệp được phân tách bằng CSV và tab, có thể đọc RẤT các tệp lớn mà Excel và Numbers bị nghẹt, và rất nhanh. Nó không phải là dòng lệnh theo nghĩa chỉ là văn bản, nhưng nó độc lập với nền tảng và có thể sẽ phù hợp với dự luật cho nhiều người đang tìm giải pháp cho vấn đề kiểm tra nhanh nhiều hoặc nhiều tệp CSV lớn khi làm việc trong môi trường dòng lệnh .

Kịch bản và cách cài đặt nó được mô tả ở đây:

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


0

Có đoạn mã lệnh ngắn này trong python: https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

Chỉ cần tải về và đặt trong đường dẫn của bạn. Cách sử dụng giống như

csv2ascii.py [options] csv-file-path

Chuyển đổi tệp csv tại csv-file-pathbiểu mẫu ascii trả về kết quả trên thiết bị xuất chuẩn. Nếucsv-file-path = '-' thì đọc từ stdin.

Tùy chọn:

  -h, --hỗ trợ hiển thị thông báo trợ giúp này và thoát
  -w WIDTH, - thong = WIDTH
                        Chiều rộng của đầu ra ascii
  -c COLUMNS, --columns = COLUMNS
                        Chỉ hiển thị số cột này
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.