我有IP列表及其各自的主机名分配如下:
192.168.1.1 - GW
192.168.1.2 - HOSTA
192.168.1.3 - HOSTB
192.168.1.7 - HOSTC
列表很大。超过4000行具有不同的子网。
我想通过BASH提取上面列表中可用的IP。
例如,IP:
192.168.1.4
192.168.1.5
192.168.1.6
要完成我正在尝试将最后一个octect的IP号与{1-255}列表进行比较。 如果最后一个八位字节的数字不在列表中,则IP可用。
还有其他想法吗?
答案 0 :(得分:2)
使用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()}
。