2014年12月28日日曜日

puffin

puffin は Python による awk の置き換えを狙ったユーティリティーである。 Python 好きと言いながらコマンドラインの細かい作業はどうしても awk を使ってしまう自分にとってなかなか魅力的な謳い文句ではないか。

サイトの最初の例では awk '{s+=$1} END {print s}'puf 'sum(cols[0])' と書ける、と。 cols[0] が $1 相当で、自動的に全行に亘る処理になるようだ。 まあ少し動きが読みにくいが便利かもしれない。

だがしかし待って欲しい。 awk の良さの半分ぐらいは grep に計算能力が付いたところ、つまり正規表現によるフィルタリング+処理という組み合わせにある。 残念ながら puffin には正規表現リテラルはないようだ。 確かに自動インポートがあって、いきなり re.match などと書けるが、さすがにまどろっこしい。 たとえば、数字の行を2倍して出力したいとき、awk なら awk '/^[0-9]+$/ {print 2 * $0}' で済むのに puf '[2 * int(line) for line in lines if re.match("\d+$", line)]' と書くしかなさそうだ。

今後に期待。

ちなみに名前の puffin は海鳥の名前で、「プログラミング言語AWK」のイラストなどに登場するオオウミガラス(絶滅種)と同じウミスズメ科に属する。