我有IP列表及其各自的主机名分配,如下所示:

192.168.1.1 - GW
192.168.1.2 - HOSTA
192.168.1.3 - HOSTB
192.168.1.7 - HOSTC

list 很大。具有不同子网的4000多个行。

我想通过BASH提取上面列表中的可用IP。

例如,IP:
192.168.1.4
192.168.1.5
192.168.1.6

为完成此任务,我尝试将最后一个八位字节的IP地址与{1-255}列表进行比较。
如果最后一个八位字节的编号不在列表中,则该IP可用。

还有其他想法吗?

最佳答案

使用awk,您可以执行以下操作:

$ awk 'function f(){while(++a!=$4&&a<257)print IP,a}
       a+1!=$4&&NR>1{f()}{a=$4;IP=$1OFS$2OFS$3}END{f()}' FS='[. ]' OFS=. file

这将打印
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.8
192.168.1.9
192.168.1.10
...
192.168.1.254
192.168.1.255
192.168.1.256

如果要将最后一个IP 192.168.1.7视为上限,并且不打印上面的可用IP,则只需删除ENDEND{f()}即可。

09-09 21:06
查看更多