\>ruby addlinenumber.rb addlinenumber.rb 01 : # AddLineNumber.rb 02 : 03 : File.open(ARGV[0]) { |f| 04 : f.read.each_with_index{ |line, index| 05 : printf("%02d : %s", index + 1, line) 06 : } 07 : }
each_with_indexというメソッドが使いたくて、使ってみました。
できるだけ簡単に書くなら、
\>ruby addlinenumber2.rb addlinenumber2.rb 01 : # addLlinenumber2.rb 02 : while gets 03 : printf("%02d : %s", $., $_) 04 : end
つまり、$.(ドル+ピリオド)が行番号で、$_(ドル+アンダーバー)が行テキストなのですが、わかりにくいかな? 特に代入しなくても$_には行テキストが入っているのは便利でよく使われるようです。
追記:ワンライナーで書けました
$ ruby -ne'printf("%2d : %s", $., $_)' temp.txt