IPアドレスをsortコマンドで並び替える

2021-07-08

IPアドレスをsortコマンドで昇順に並び替える「sort -V」

IPアドレスを記載されている下記のようなテキストファイルがある場合に、sortコマンドを利用してIPアドレス順に並べるには、「-V –version-sort」を使えば簡単にIPアドレスを昇順で並び替えできます

$ cat ip.txt 
192.168.0.1
202.145.12.1
192.168.30.1
34.23.10.1
221.111.49.1
168.192.0.1
12.132.12.1
20.1.2.1
30.1.11.1
230.2.1.1

「sort -V」を使って下記のように並び替えをおこなってみます。IPアドレスが昇順で並び替えができます。
-V –version-sort」のオプションは、manコマンドで確認すると「自然な (バージョン) 数字順でソートする」となります。
自然なバージョンで数字順とわかりにくいですが、IPアドレスの1オクテット目、2オクテット目、3オクテット目、4オクテット目を数字順で並び替えてくれているような感じです

$ sort -V ip.txt 
12.132.12.1
20.1.2.1
30.1.11.1
34.23.10.1
168.192.0.1
192.168.0.1
192.168.30.1
202.145.12.1
221.111.49.1
230.2.1.1

「sort -V」を使用しないでIPアドレスを昇順で並び替える方法

この「sort -V」を使わないので、IPアドレスを並び替えする場合は、少し手間になります。普通にsortコマンドとuniqコマンドでソートしてみるとIPアドレスが文字列扱いとなり意図した形になりません。「sort -t’.’ 」は、「.」で区切り文字として指定しています

$ cat ip.txt | sort -t'.' | uniq 
12.132.12.1
168.192.0.1
192.168.0.1
192.168.30.1
20.1.2.1
202.145.12.1
221.111.49.1
230.2.1.1
30.1.11.1
34.23.10.1

文字列ではなく、数字として扱うように「-n」としても、192.168.0.1 192.28.30.12と並びなのでオクテット目が昇順に並びません。

$ cat ip.txt | sort -n -t'.' 
12.132.12.1
20.1.2.1
30.1.11.1
34.23.10.1
168.192.0.1
192.168.0.1
192.28.30.1
202.145.12.1
221.111.49.1
230.2.1.1

IPアドレスの1オクテット目、2オクテット目、3オクテット目、4オクテット目を数字順で並び替えには「-k1n -k2n -k3n -k4n」とすれば並び替えができます。「-k1n」は、1列目を数値として並べ替えるとなりますので、同様に4列目まで指定します

$ cat ip.txt | sort -t'.' -k1n -k2n -k3n -k4n
12.132.12.1
20.1.2.1
30.1.11.1
34.23.10.1
168.192.0.1
192.168.0.1
192.28.30.1
202.145.12.1
221.111.49.1
230.2.1.1

「sort -V」を使用しないとコマンドのオプションも複数使用しないといけないので面倒ですので、簡単に「sort -V」がおすすめです

 

LinuxCentOS 6,CentOS 7

Posted by admin