作为参考,这是使用 shell 将组 IP 地址分配到不同子网的后续操作和变体
我们有两个字符串(名为 master/slave),这两个字符串由分布在三个子网中的 IPS 组成。只需将这两个字符串分成对,其中每对中的两个地址位于不同的 /24 子网中。以下是示例:
主/从服务器均有 5 个 IPS,分布在 3 个子网中
172.28.250/172.28.154/172.28.254
。
masters='172.28.250.99 172.28.250.101 172.28.154.41 172.28.154.52 172.28.254.30'
slaves='172.28.250.103 172.28.250.104 172.28.154.53 172.28.254.32 172.28.254.33'
最终输出将创建如下对:左侧来自从属设备,右侧来自主设备,并且对于每一对,前三个部分是不同的,因为172.28.154.53 => 172.28.250.99 ,172.28.154
不同于172.28.250
输出不是唯一的,我们想要的只是在不同的子网中设置主/从
172.28.154.53 → 172.28.250.99
172.28.250.103 → 172.28.154.41
172.28.250.104 → 172.28.254.30
172.28.254.32 → 172.28.250.101
172.28.254.33 → 172.28.154.52
我已经尝试了 Stephane 建议的代码,如下所示,我们可以将所有 ip 推送到哈希中并进行配对以生成映射,但输出将使来自 master 的一个 ip 与来自 master 的另一个 ip 匹配,这不是预期的输出
perl -e '
push @{$s{s/\.\d+$//r}}, $_ for @ARGV;
@l = values %s;
for ($n = @ARGV; $n > 0; $n -= 2) {
@l = sort {@$b <=> @$a} @l;
printf "%s %s\n", pop(@{$l[0]}), pop(@{$l[1]});
}' $masters $slaves
使用此代码输出是
172.28.250.104 172.28.254.33
172.28.250.103 172.28.154.53
172.28.250.101 172.28.154.52
172.28.254.32 172.28.250.99
172.28.254.30 172.28.154.41
我们可以172.28.250.103 172.28.154.53
从大师那里看到,这不是我们所需要的。