Rubyメモ: Ruby でワンライナープログラミング

ワンライナーは、コマンドラインから ruby を実行するときに、1 行だけコードを入力して簡単な処理を行うものです。 コマンドの出力をサクッと加工するのに適しています。

例: 各行の 3 番目のフィールドのみ抜き出す
$ cat data.txt
AAA 100 xxx
BBB 200 yyy
CCC 300 zzz

$ cat data.txt | ruby -ane "puts $F[2]"
xxx
yyy
zzz

上記のように、テキストファイルの内容をそのままワンライナーに渡すのであれば、リダイレクトで入力することもできます。 こちらの方が cat コマンドなどに依存しないのでよいかもしれません。

$ ruby -ane "puts $F[2]" < data.txt

オプションの意味:

  • -a: autosplit mode(各行の $_ が分割されて $F に格納される)
  • -n: 各行を処理する(内部で while gets() ループが実行される)
  • -e: 後ろにコマンドを直接記述していることを示す

-n オプションを付けて各行を処理する場合は、Awk のように、最初に一度だけ実行される BEGIN ブロックや、最後に一度だけ実行される END ブロックを利用できます。

例: 各行の 2 番目のフィールドの値を合計する
$ ruby -ane "BEGIN{$a=0}; $a+=$F[1].to_i; END{puts $a}" < data.txt

参考サイト