A high performance csv viewer with cjk/emoji support.
- Correctly handles CJK characters and emoji.
- Small, exquisite and fast (see benchmarks below).
- Support different styles.
- Support
tsvand custom delimiters. - Able to generate markdown table (with
--style markdownoption).
$ 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.
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'
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: BurntSushi/xsv#156
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.
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
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.