[Linux便利コマンド] csviewを入れてみる


環境

概要

普段仕事にて、csvを扱うことがよくあるのですが
CUIでのcsvビューワーがあるようなので入れてみます

インストール

# ダウンロード
$ curl -OL https://github.com/wfxr/csview/releases/download/v0.3.5/csview-v0.3.5-x86_64-unknown-linux-gnu.tar.gz

# 解凍
$ tar -zxvf csview-v0.3.5-x86_64-unknown-linux-gnu.tar.gz
$ cd csview-v0.3.5-x86_64-unknown-linux-gnu

# パスが通っているところに移動
$ sudo mv csview /usr/local/bin/

簡単ですね。

では実践!

# 実行
$ csview a.csv

すると

Glibcの2.18が見つからないとエラーが発生!!

$ sudo yum update glibc

にてアップデートをしようとしますが、2.17までしか無いよう。

すると、

の記事を参考に手動でglibcを更新できるみたいなのでやってみる。

Glibcの2.18をインストール

$ cd /tmp
$ wget https://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
$ tar -zxvf glibc-2.18.tar.gz
$ cd glibc-2.18
$ mkdir build
$ cd build
$ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
$ make && make install

$ ldd --version
ldd (GNU libc) 2.18
Copyright (C) 2013 Free Software Foundation, Inc.

これでglibcが2.18になりました。。よかったよかった。

気を取り直して、再度csviewを実践!

文字コードが違う!!

$ csview a.csv
[error] input is not utf8 encoded

またもエラー。
文字コードがutf8じゃないと駄目だと。

csviewのgithubのREADMEに書いてある通りiconvをかませば行けるよう。

$ iconv -f shift-jis -t UTF8//TRANSLIT a.csv| csview
+-------------+----------+----------------+
| コード      | 名称     | 説明           |
+-------------+----------+----------------+
| abc         | 消しゴム | よく消えるよ   |
| ABCDEFGHIJK | えんぴつ | もちやすいよ   |
|             |          | 芯も折れにくい |
+-------------+----------+----------------+

行けた!!!!

見た目の種類を確認

$ ./csview --help
csview 0.3.5
A high performance csv viewer with cjk/emoji support.

USAGE:
    csview [FLAGS] [OPTIONS] [FILE] [SUBCOMMAND]

FLAGS:
    -h, --help          Prints help information
    -H, --no-headers    Specify that the input has no header row
    -t, --tsv           Use '\t' as delimiter for tsv, overrides '-d' option
    -V, --version       Prints version information

OPTIONS:
        --style <border>           Specify the border style [default: Ascii]  [possible values: None, Ascii, Sharp, Rounded, Reinforced, Markdown, Grid]
    -d, --delimiter <delimiter>    Specify the field delimiter [default: ,]

ARGS:
    <FILE>    File to read

SUBCOMMANDS:
    completion    Generate shell completion file
    help          Prints this message or the help of the given subcommand(s)

とのことで、--styleでいろいろ変えれるみたい。

$ iconv -f shift-jis -t UTF8//TRANSLIT a.csv| csview --style none
 コード       名称      説明 
 abc          消しゴム  よく消えるよ 
 ABCDEFGHIJK  えんぴつ  もちやすいよ 
                        芯も折れにくい 
$ iconv -f shift-jis -t UTF8//TRANSLIT a.csv| csview --style ascii
+-------------+----------+----------------+
| コード      | 名称     | 説明           |
+-------------+----------+----------------+
| abc         | 消しゴム | よく消えるよ   |
| ABCDEFGHIJK | えんぴつ | もちやすいよ   |
|             |          | 芯も折れにくい |
+-------------+----------+----------------+
$ iconv -f shift-jis -t UTF8//TRANSLIT a.csv| csview --style sharp
┌─────────────┬──────────┬────────────────┐
│ コード      │ 名称     │ 説明           │
├─────────────┼──────────┼────────────────┤
│ abc         │ 消しゴム │ よく消えるよ   │
│ ABCDEFGHIJK │ えんぴつ │ もちやすいよ   │
│             │          │ 芯も折れにくい │
└─────────────┴──────────┴────────────────┘
$ iconv -f shift-jis -t UTF8//TRANSLIT a.csv| csview --style rounded
╭─────────────┬──────────┬────────────────╮
│ コード      │ 名称     │ 説明           │
├─────────────┼──────────┼────────────────┤
│ abc         │ 消しゴム │ よく消えるよ   │
│ ABCDEFGHIJK │ えんぴつ │ もちやすいよ   │
│             │          │ 芯も折れにくい │
╰─────────────┴──────────┴────────────────╯
$ iconv -f shift-jis -t UTF8//TRANSLIT a.csv| csview --style reinforced
┏─────────────┬──────────┬────────────────┓
│ コード      │ 名称     │ 説明           │
├─────────────┼──────────┼────────────────┤
│ abc         │ 消しゴム │ よく消えるよ   │
│ ABCDEFGHIJK │ えんぴつ │ もちやすいよ   │
│             │          │ 芯も折れにくい │
┗─────────────┴──────────┴────────────────┛
$ iconv -f shift-jis -t UTF8//TRANSLIT a.csv| csview --style markdown
| コード      | 名称     | 説明           |
|-------------|----------|----------------|
| abc         | 消しゴム | よく消えるよ   |
| ABCDEFGHIJK | えんぴつ | もちやすいよ   |
|             |          | 芯も折れにくい |
$ iconv -f shift-jis -t UTF8//TRANSLIT a.csv| csview --style grid
┌─────────────┬──────────┬────────────────┐
│ コード      │ 名称     │ 説明           │
├─────────────┼──────────┼────────────────┤
│ abc         │ 消しゴム │ よく消えるよ   │
├─────────────┼──────────┼────────────────┤
│ ABCDEFGHIJK │ えんぴつ │ もちやすいよ   │
│             │          │ 芯も折れにくい │
└─────────────┴──────────┴────────────────┘

普段は改行がよくされるようなcsvを扱うことが多いので、個人的にはgridが一番よいですかねー。

エイリアス

毎回iconvの指定をするのはめんどくさいのでエイリアス(function)を用意しておこうと思います

shift-jisへの変換だからcsview + scsviewsにしました。。
ついでに表示のstyleも乗っけておきます

function csviews() {
  command iconv -f shift-jis -t UTF8//TRANSLIT $1 | csview --style grid
}
$ csviews a.csv 
┌─────────────┬──────────┬────────────────┐
│ コード      │ 名称     │ 説明           │
├─────────────┼──────────┼────────────────┤
│ abc         │ 消しゴム │ よく消えるよ   │
├─────────────┼──────────┼────────────────┤
│ ABCDEFGHIJK │ えんぴつ │ もちやすいよ   │
│             │          │ 芯も折れにくい │
└─────────────┴──────────┴────────────────┘

あー便利。

まとめ

大きいものを見るときはしんどそうですが、ちょっとした確認でわざわざソフトで開いたりするのも面倒・・というときには
とても便利そうです。

qiita上では見た目が行間のpaddingが効いてしまってるため線が分かれてるのですが、実際のコンソール上では線はきれいにくっついて引かれているので
ぜひ気になった方は実際に試してみてみてください。