A high performance csv viewer with cjk/emoji support

Small and fast (see benchmarks below)

📠 csview

.

Features

  • Small and fast (see benchmarks below).
  • Correctly handles CJK characters and emoji.
  • Support different styles.
  • Support tsv and custom delimiters.
  • Able to generate markdown table (with --style markdown option).

Usage

$ cat example.csv
Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00

$ csview example.csv
+------+-------+----------------------------------------+------------------------+---------+
| Year | Make  | Model                                  | Description            | Price   |
+------+-------+----------------------------------------+------------------------+---------+
| 1997 | Ford  | E350                                   | ac, abs, moon          | 3000.00 |
| 1999 | Chevy | Venture "Extended Edition"             |                        | 4900.00 |
| 1999 | Chevy | Venture "Extended Edition, Very Large" |                        | 5000.00 |
| 1996 | Jeep  | Grand Cherokee                         | MUST SELL!             | 4799.00 |
|      |       |                                        | air, moon roof, loaded |         |
+------+-------+----------------------------------------+------------------------+---------+

$ head -n10 /etc/passwd | csview --no-headers -d:
+------------------------+---+-------+-------+----------------------------+-----------------+
| root                   | x | 0     | 0     |                            | /root           |
| bin                    | x | 1     | 1     |                            | /               |
| daemon                 | x | 2     | 2     |                            | /               |
| mail                   | x | 8     | 12    |                            | /var/spool/mail |
| ftp                    | x | 14    | 11    |                            | /srv/ftp        |
| http                   | x | 33    | 33    |                            | /srv/http       |
| nobody                 | x | 65534 | 65534 | Nobody                     | /               |
| dbus                   | x | 81    | 81    | System Message Bus         | /               |
| systemd-journal-remote | x | 982   | 982   | systemd Journal Remote     | /               |
| systemd-network        | x | 981   | 981   | systemd Network Management | /               |
+------------------------+---+-------+-------+----------------------------+-----------------+

Run csview --help to view detailed usage.

Installation

On Arch Linux

csview is available in the Arch User Repository. To install it from AUR:

yay -S csview

On macOS

You can install csview with Homebrew:

brew tap wfxr/csview
brew install csview

On NetBSD

csview is available from the main pkgsrc Repositories. To install simply run

pkgin install csview

or, if you prefer to build from source using pkgsrc on any of the supported platforms:

cd /usr/pkgsrc/textproc/csview
make install

On Windows

You can install csview with Scoop:

scoop install csview

From binaries

Pre-built versions of csview for various architectures are available at Github release page.

Note that you can try the musl version (which is statically-linked) if runs into dependency related errors.

From source

csview is also published on crates.io. If you have Rust toolchains (1.40 or above) installed you can use cargo to install it from source:

cargo install --locked csview

If you want the latest version, clone this repository and run cargo build --release.

Benchmark

Compared with csvlook provided by csvkit:

  • sample.csv (10000 rows, 10 cols, 624K size):
Benchmark #1: csvlook sample.csv
  Time (mean ± σ):      4.010 s ±  0.100 s    [User: 3.945 s, System: 0.051 s]
  Range (min … max):    3.911 s …  4.249 s    10 runs

Benchmark #2: csview sample.csv
  Time (mean ± σ):      46.5 ms ±   2.3 ms    [User: 39.7 ms, System: 6.5 ms]
  Range (min … max):    44.0 ms …  59.4 ms    59 runs

Summary
  'csview sample.csv' ran
   86.32 ± 4.83 times faster than 'csvlook sample.csv'
  • action.csv (10 rows, 4 cols, 1K size):
Benchmark #1: csvlook action.csv
  Time (mean ± σ):     316.5 ms ±   5.2 ms    [User: 284.8 ms, System: 35.0 ms]
  Range (min … max):   309.3 ms … 326.2 ms    10 runs

Benchmark #2: csview action.csv
  Time (mean ± σ):       0.7 ms ±   0.2 ms    [User: 0.8 ms, System: 0.7 ms]
  Range (min … max):     0.4 ms …   1.6 ms    933 runs

Summary
  'csview action.csv' ran
  461.25 ± 109.34 times faster than 'csvlook action.csv'

F.A.Q.


We already have xsv, why not contribute to it but build a new tool?

xsv is an awesome csv tookit. It's aimed for analyzing and manipulating csv data. csview is designed for formatting and viewing. Their relationship is like awk and column.

The author of xsv may have the similar views with me: https://github.com/BurntSushi/xsv/issues/156


Things look weird if the width of table is more than the width of terminal window.

Use pager less with -S option: csview a.csv | less -S so you can scroll screen horizontally. Or use xsv to filter out the columns you don't care then piped to csview.


I encountered UTF-8 related errors, how to solve it?

The file may use a non-UTF8 encoding. You can check the file encoding using file command:

$ file -i a.csv
a.csv: application/csv; charset=iso-8859-1

And then convert it to utf8:

$ iconv -f iso-8859-1 -t UTF8//TRANSLIT a.csv -o b.csv
$ csview b.csv

Or do it in place:

$ iconv -f iso-8859-1 -t UTF8//TRANSLIT a.csv | csview

Credits

  • csv-rust
  • prettytable-rs
  • structopt

License

csview is distributed under the terms of both the MIT License and the Apache License 2.0.

See the LICENSE-APACHE and LICENSE-MIT files for license details.

Versions

Find the latest versions by id

v1.0.1 - Feb 16, 2022

v1.0.0 - Feb 16, 2022

v1.0.0-rc.1 - Jan 05, 2022

v1.0.0-rc - Jan 03, 2022

v0.3.12 - Jan 01, 2022

v0.3.11 - Jan 01, 2022

v0.3.10 - Dec 26, 2021

v0.3.9 - Nov 23, 2021

v0.3.8 - Apr 05, 2021

v0.3.7 - Mar 19, 2021

v0.3.6 - Feb 07, 2021

v0.3.5 - Sep 23, 2020

v0.3.4 - Sep 19, 2020

v0.3.3 - Sep 19, 2020

v0.3.2 - Sep 18, 2020

v0.3.1 - Sep 17, 2020

v0.3.0 - Sep 17, 2020

Information - Updated May 08, 2022

Stars: 327
Forks: 10
Issues: 2

Repositories & Extras

rhex ASCII terminal game coded in Rust

Learn how to code your own terminal based game in Rust

rhex ASCII terminal game coded in Rust

KDash - A fast and simple dashboard for Kubernetes

A simple terminal dashboard for Kubernetes built with Rust

KDash - A fast and simple dashboard for Kubernetes

A dead simple ANSI terminal color painting library for Rust

See the ansi_term, term_painter, to name a few), begging the question: why yet another? Here

A dead simple ANSI terminal color painting library for Rust
Linux

1.3K

In terminal graphical metrics for your *nix system written in Rust

Optional CPU, Memory, Network, and Disk usage charts

In terminal graphical metrics for your *nix system written in Rust

gobang is currently in alpha

A cross-platform terminal database tool written in Rust

gobang is currently in alpha

implementation in RUST

current state: game is displayed in the Terminal as unicode chars

implementation in RUST
CLI

1.6K

From source (recommended)

A small command-line application to view images from the terminal written in Rust

From source (recommended)

ranger-like terminal file manager written in Rust

wiki/Configuration for details

ranger-like terminal file manager written in Rust
CLI

249

Ttyper is a terminal-based typing test built with Rust and tui-rs

For usage instructions, you can run ttyper --help

Ttyper is a terminal-based typing test built with Rust and tui-rs

Terminal plotting library for using in Rust CLI applications

Should work well in any unicode terminal with monospaced font

Terminal plotting library for using in Rust CLI applications
Facebook Instagram Twitter GitHub Dribbble
Privacy