ぼーっとネットで調べものしてたところ、xargsとawkを組み合わせたようなツール『rargs』なるものを見かけたので、試しに使ってみることにする。

1.インストール

Rustで書かれているようで、インストールはCargoからコンパイルするか、[Release]q(https://github.com/lotabout/rargs/releases)からバイナリを取ってくる方法がある。とりあえずRustの環境は手元にあったので、その方法でインストールする。

cargo install --git https://github.com/lotabout/rargs.git

2.使ってみる

さて、インストールもできたので、とりあえず使ってみよう。 どうやらrargsは{0}、{1}といった方法で各カラムを定義できるようだ。awkだと$0で行全体を指定できるが、rargsでも{0}それは同じようだ。

とりあえず、試しにseqの出力に対して「 .test」という出力に書き換えさせてみる。

seq -w 100 110 | rargs echo {0} {0}.test

[blacknon@blacknon-ThinkPad-X201][~]
(`・ω・´)  < seq -w 100 110 | rargs echo {0} {0}.test
100 100.test
101 101.test
102 102.test
103 103.test
104 104.test
105 105.test
106 106.test
107 107.test
108 108.test
109 109.test
110 110.test

[blacknon@blacknon-ThinkPad-X201][~]
(`・ω・´)  < seq -f '%g 2nd_column' 100 110 | rargs echo {1}_{2}
100_2nd_column
101_2nd_column
102_2nd_column
103_2nd_column
104_2nd_column
105_2nd_column
106_2nd_column
107_2nd_column
108_2nd_column
109_2nd_column
110_2nd_column

READMEをみていると、-pで正規表現を利用して列を分割することもできるようだ(正規表現はRustの正規表現の書き方らしい)。 抽出は「()」で囲むことで行えるので、sedやPerlと同じような感覚で書けるみたいだ。

seq -f '%g_test' 100 110 | rargs -p '([0-9]+)*' echo '{0} => {1}'
[blacknon@blacknon-ThinkPad-X201][~]
(`・ω・´)  < seq -f '%g_test' 100 110 | rargs -p '([0-9]+)*' echo '{0} => {1}'
100_test => 100
101_test => 101
102_test => 102
103_test => 103
104_test => 104
105_test => 105
106_test => 106
107_test => 107
108_test => 108
109_test => 109
110_test => 110

-pでは()内で「?P」で名前をつけることができるようだ。 ちょっと触ってみた感じでも結構便利そうな印象。同じことはawkやsed、xargs(+bash)でできるんだろうけど、それよりも簡潔に書くことができるのは魅力的だと思う。