先日、CSV版のjqコマンドを目指しているというコマンド『miller』というものを見かけたので、試しに使ってみることにする。
今回はインストール先としてCentOS 7を用いる。

1.インストール

まずはインストール。
以下のコマンドを実行する。

yum install flex
wget https://github.com/johnkerl/miller/releases/download/v4.1.0/mlr-4.1.0.tar.gz
tar xzvf mlr-4.1.0.tar.gz
cd mlr-4.1.0
./configure
make && make install

これでインストールできた。

2.実際に使ってみる

さて、それでは実際に使ってみよう。
millerでは、以下のようにコマンドを実行する。

mlr [オプション] verb(サブコマンド) ...

verbの一覧は、以下のコマンドで見ることができる。

mlr -l
[root@BS-PUB-CENT7-01 work]# mlr -l
 bar bootstrap cat check count-distinct cut decimate filter grep group-by
 group-like having-fields head histogram join label merge-fields nest put
 regularize rename reorder repeat reshape sample shuffle sec2gmt sort stats1
 stats2 step tac tail top uniq

それぞれのverbの使い方については、以下のようにコマンドを実行することで得ることができる。

mlr <verb> --help
[root@BS-PUB-CENT7-01 work]# mlr cat --help
Usage: mlr cat [options]
Passes input records directly to output. Most useful for format conversion.
Options:
-n        Prepend field "n" to each record with record-counter starting at 1
-N {name} Prepend field {name} to each record with record-counter starting at 1

以下、いくつかのverbを使ってみる。

[root@BS-PUB-CENT7-01 doc]# cat mydata.csv
1,2,3,4,5,6,x,y,9,10,hostname,12,13,14,status,16,uptime
_,_,_,_,_,_,-0.0489,147.2,_,_,jupiter.xyzzy.org,_._,_,_,up,_,342
_,_,_,_,_,_,-0.0489,147.2,_,_,jupiter.xyzzy.org,_._,_,_,down,_,5667778
[root@BS-PUB-CENT7-01 doc]# mlr cat mydata.csv
1=1,2=2,3=3,4=4,5=5,6=6,7=x,8=y,9=9,10=10,11=hostname,12=12,13=13,14=14,15=status,16=16,17=uptime
1=_,2=_,3=_,4=_,5=_,6=_,7=-0.0489,8=147.2,9=_,10=_,11=jupiter.xyzzy.org,12=_._,13=_,14=_,15=up,16=_,17=342
1=_,2=_,3=_,4=_,5=_,6=_,7=-0.0489,8=147.2,9=_,10=_,11=jupiter.xyzzy.org,12=_._,13=_,14=_,15=down,16=_,17=5667778
[root@BS-PUB-CENT7-01 doc]# mlr --csv --rs lf filter '$status != "down" && $upsec >= 10000' *.csv
1,2,3,4,5,6,x,y,9,10,hostname,12,13,14,status,16,uptime
_,_,_,_,_,_,-0.0489,147.2,_,_,jupiter.xyzzy.org,_._,_,_,up,_,342

うーん、CSV形式が相手なら慣れてるならawkとかでやったほうが早い気もするけど、選択肢は多いほうがいいだろうし、悪くはないのではなかろうか。
いろいろともうちょいわかりやすいといいのだけど…