ワンライナーは、コマンドラインから ruby
を実行するときに、1 行だけコードを入力して簡単な処理を行うものです。
あるコマンドの出力をさくっと加工するのに適しています。
$ 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
ブロックなどを利用できます。
$ ruby -ane "BEGIN{$a=0}; $a+=$F[1].to_i; END{puts $a}" < data.txt
600