对 IP 地址进行排序时出现奇怪的行为。(sort -nu)

对 IP 地址进行排序时出现奇怪的行为。(sort -nu)

我刚刚尝试|sort -nu(数字且唯一)列出大约 30 个 IP 地址,并注意到除了剔除重复的行之外,它还将相似的行(即前两个或三个八位字节相同的地址)视为相同的行;并将它们剪掉。

那是怎么回事?

为了说明起见,您可以模拟这种情况,如下所示:


标准输入

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

或者,告诉它按所有四个字段按数字排序:

$ 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

相关内容