テキストに行番号を振る

\>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