Ruby のコマンドラインオプションを復習しました!
こういうのはワンライナーで十分だよね。と思いつつも、Perl の時は多少なりともワンライナーで書いていたのに Ruby では全然書いてなくて、それでもってオプション指定しようとして戸惑いました。
これはマズい!と思ったので、慌てて復習してみました。
なお以下はざっと書いてみただけなので信用しないで下さい。興味を持ったらちゃんとリファレンスマニュアルを読んで下さいね。
よく使うからさすがに覚えているオプション
よく使うから覚えているものを列挙してみます。
- -h : help見れないとどうにもならないから
- --version : バージョン確認しないと不安だもの
- -e : コードの実行
- -K : 文字コードの指定
- -c : 統語チェック
- -d : $DEBUG = true
- -I : ロードパスの追加
- -r : require、便利だけど gem 依存してると頼りない(1.8)
- -T : 大好きな $SAFE を指定
- -v : 冗長モード、色々エラーメッセージ見れるから好き
こんなものでしょうか。
便利なはずなのに忘れていたオプション
必須とも言える n, p を覚えていませんでした!なんてこった鳥頭!
そもそも覚える気のないオプション
こういうのは、まぁ覚えてなくていいかなぁ、と思うもの。
いざ実践
では ダオカオス☆技術局 をワンライナーで書き直してみます。
まずたぶんそれっぽい入力データを用意します。こんなの。
1 2007-08 2008-07 a 2 2006-07 2007-06 b 3 2005-06 2008-07 c 4 2007-08 2007-12 d 5 2003-04 2005-01 e
じゃあこれを in.txt としてコマンドラインから次を実行します。
% ruby -ape '$_ = "" unless $F[1] =~ /\A2007-08/' in.txt > out.txt
out.txt の内容は次のようになります。
1 2007-08 2008-07 a 4 2007-08 2007-12 d
やったね!
と思ったのですが、こういう時は -n の方が素直なんでしょうか。
% ruby -ane 'print if $F[1] =~ /\A2007-08/' in.txt > out.txt
というくらいに戸惑うわけなので、やっぱり普段からちゃんと練習しておこうと思いました。反省。