Features
- Correctly handles CJK characters and emoji.
- Small, exquisite and fast (see benchmarks below).
- 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.
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
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.