IP アドレスをソートする際の動作が異常です。(sort -nu)

IP アドレスをソートする際の動作が異常です。(sort -nu)

約 30 個の IP アドレスのリストを (数値および一意の)にしようとした|sort -nuところ、重複行が削除されるだけでなく、類似の行 (つまり、最初の 2 つまたは 3 つのオクテットが同じアドレス) も同一のものとして扱われ、削除されていることに気付きました。

どうしたの?

たとえば、このシナリオを次のようにシミュレートできます。


標準入力

for ip in 192.168.1.{1..5};
do
    echo "$ip";
done > ip.log

for ip in 10.1.1.{1..5};
do
    echo "$ip";
done >> ip.log

cat 'ip.log'

標準出力

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
10.1.1.1
10.1.1.2
10.1.1.3
10.1.1.4
10.1.1.5

標準入力

sort -nu 'ip.log'

標準出力

10.1.1.1
192.168.1.1

答え1

sortバージョン番号でソートするように指示します:

$ sort -Vu 'ip.log'
10.1.1.1
10.1.1.2
10.1.1.3
10.1.1.4
10.1.1.5
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5

あるいは、4 つのフィールドすべてを数値順に並べ替えるように指示します。

$ sort -nu -t. -k1 -k2 -k3 -k4  'ip.log'
10.1.1.1
10.1.1.2
10.1.1.3
10.1.1.4
10.1.1.5
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5

関連情報