rfコマンドのv1.1.0をリリースした。 もう少し機能を追加してからにしようと思ったけど、サクサクリリースしていこう精神でバージョンを上げた。 以下、追加された機能や変更点の説明をする。
バイナリをstripしてファイルサイズを少し減らした
cc時に-s
をつけていたのだが、リンカには-s
をつけてなくてstripされていなかったのを修正した。
そもそもファイルサイズが4MB以上あってstripしてもファイルサイズが減る量は微々たるものだが、やっていないよりマシという感じ。
特殊変数をいくつか追加した
利便性向上のためにrfで使える特殊変数をいくつか追加した。
record
,_0
: 入力されているレコード。_
と同じfields
: 入力されているフィールド。$F
と同じNR
,$.
: 1始まりの入力されたレコード数
record
とfields
については、それぞれ_
と$F
と同値なのだが、英語名がついていたほうがわかりやすいので追加したという感じ。
_0
はawkにおける $0
のイメージ。
また、入力されたレコード数を示す変数としてNR
と$.
を追加した。
NR
はawkのNR
と同じイメージ*1。
$.
はCRubyに置いてはIO.getsの回数なのだが、rfでは入力されたレコード数とした。
jsonフィルタに-rオプションを追加した
JSONの文字列はダブルクォーテーションで囲われていて文字がエスケープされている。例; "foo\u0010"
CLIで処理するときに、ダブルクォーテーションやエスケープを解除したほうが便利なことがある。
jqにおいては-r
オプションがあり、StringをRaw出力ができる。
それと同等のことができるオプションとして-r
を追加した。
echo '"hello"' | rf -j '"#{_}\nworld"' #=> "hello\nworld" echo '"hello"' | rf -jr '"#{_}\nworld"' #=> hello #=> world
*1:この実装時にRubyにおいてはレシーバのない大文字は定数として扱われて、レシーバがあるとメソッドとして扱われるという違いを知った。最初実装しているときにこの違いが分からなくて、instance_evalの中からNFメソッドを呼び出せなくて困惑していた。違いに気がついたあとは普通に定数として定義している。