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メソッドを呼び出せなくて困惑していた。違いに気がついたあとは普通に定数として定義している。