IPアドレスのソートがちょっと面倒。
普通にRubyを使ってIPアドレスをソートしようとすると、
ruby>>
ip_addrs = ["192.100.100.1", "192.11.11.1", "192.11.100.1"]
ip_addrs.sort
#=> ["192.100.100.1", "192.11.100.1", "192.11.11.1"]
<<ruby
となって、きちんとソートされない。
まぁ、当たり前と言えば当たり前なんですが・・・。
きちんとソートするためには、こんな感じにしてみる。
ruby>>
ip_addrs.sort_by{|a| a.split(".").map{|i| "%3d" % i.to_i}}
#=> ["192.11.11.1", "192.11.100.1", "192.100.100.1"]
<<ruby
もうちょっと綺麗に書けんなぁ?
"%3d"とか、なんか嫌やなぁ。
ちなみにシェルだと、
shell-unix-generic>>
$ echo '
192.100.100.1
192.11.11.1
192.11.100.1
' | sort -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 -n
192.11.11.1
192.11.100.1
192.100.100.1
<<shell-unix-generic
とかできるけど、-kオプションが気に入らない感じ。
もっと綺麗に書ける方法はないのだろうか・・・。