Linux sort -V で IPアドレスをソートする

Linux
この記事は約3分で読めます。

 

今更ながらですが、sortのVオプションがとても便利だったので。

 

 

以下のようなIPアドレスの一覧があったとします。

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をしてみると思い通りにいきません。

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オプションを使うと昇順に並び替えてくれます。

$ 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です。

 $ 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のマニュアルを見てみると次のように書いてありました。

$ man sort


-V, –version-sort
natural sort of (version) numbers within text

翻訳すると

テキスト内の(バージョン)番号の自然なソート

ということで、IPアドレスだけでなくバージョンの並び替えをするときにも活躍します。

 

以上です。

                 
Linux
                 
シェアする

コメント

タイトルとURLをコピーしました