我有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,则只需删除END
块END{f()}
即可。