今更ながらですが、sortのVオプションがとても便利だったので。
以下のようなIPアドレスの一覧があったとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
cat /tmp/list 192.168.1.40 192.168.1.55 192.168.1.45 192.168.1.59 192.168.1.64 192.168.1.88 192.168.1.120 192.168.1.104 192.168.1.130 192.168.1.119 192.168.1.140 192.168.1.144 192.168.1.145 192.168.1.129 192.168.1.252 192.168.1.250 192.168.1.255 192.168.1.62 |
↑を見るとわかりますが、IPアドレスの並びはバラバラです。
IPアドレスを昇順にしようとsortをしてみると思い通りにいきません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
sort /tmp/list 192.168.1.104 192.168.1.119 192.168.1.120 192.168.1.129 192.168.1.130 192.168.1.140 192.168.1.144 192.168.1.145 192.168.1.250 192.168.1.252 192.168.1.255 192.168.1.40 192.168.1.45 192.168.1.55 192.168.1.59 192.168.1.62 192.168.1.64 192.168.1.88 |
IPアドレスの第4オクテットの1文字目で数字の大小を判断してしまっているため、このような並びになってしまいます。
しかし、Vオプションを使うと昇順に並び替えてくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ sort -V /tmp/list 192.168.1.40 192.168.1.45 192.168.1.55 192.168.1.59 192.168.1.62 192.168.1.64 192.168.1.88 192.168.1.104 192.168.1.119 192.168.1.120 192.168.1.129 192.168.1.130 192.168.1.140 192.168.1.144 192.168.1.145 192.168.1.250 192.168.1.252 192.168.1.255 |
降順にしたければrオプションも併用すればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ sort -Vr /tmp/list 192.168.1.255 192.168.1.252 192.168.1.250 192.168.1.145 192.168.1.144 192.168.1.140 192.168.1.130 192.168.1.129 192.168.1.120 192.168.1.119 192.168.1.104 192.168.1.88 192.168.1.64 192.168.1.62 192.168.1.59 192.168.1.55 192.168.1.45 192.168.1.40 |
うん、とても便利。
sortのマニュアルを見てみると次のように書いてありました。
1 |
$ man sort |
-V, –version-sort
natural sort of (version) numbers within text
翻訳すると
テキスト内の(バージョン)番号の自然なソート
ということで、IPアドレスだけでなくバージョンの並び替えをするときにも活躍します。
以上です。
コメント