【场景】
1
2
3
4
5
6
7
8
9
10
11
12 |
有大概这样的IP段列表, 111.0.0.0-111.188.255.0 10.0.0.0-99.0.0.0 88.0.0.0-100.0.0.0 复制代码 如何用脚本 生成一文件内容为 111.0.0.0 111.0.0.1 111.0.0.2 111.0.0.3 ... 111.188.255.0 |
【分析】
题意是:生成两个IP之前IP列表;若IP的前3个是相同的;这样处理就很好解决。其实大家可以仿照之前的工时脚本那篇博客的思路来解决。不过下面的代码更好一点;好在自定义函数的代码。同理之前的工时脚本也可以按照下面的代码思路来写自定义函数
【代码】
1
2
3 |
function ip2n(ip, n,c){ split (ip,a, "." ); for (c=1;c<=4;c++)n=n*256+a[c]; return
n} function n2ip(n, ip,c){ip=n%256; for (c=3;c>0;c--){n= int (n/256);ip(n%256) "." ip} return
ip} BEGIN{FS= "-" }{s=ip2n($1);e=ip2n($2); while (s<=e) print
n2ip(s++)}‘ |
【测试】
1
2
3
4
5
6
7
8
9
10
11
12
13 |
echo 111.0.255.250-111.1.0.5 | awk -F ‘-‘
‘function ip2n(ip, n,c){split(ip,a,".");for(c=1;c<=4;c++)n=n*256+a[c];return n}function n2ip(n, ip,c){ip=n%256;for(c=3;c>0;c--){n=int(n/256);ip=(n%256)"."ip}return ip}{s=ip2n($1);e=ip2n($2);[backcolor=Yellow]while(s<=e)[/backcolor]print [backcolor=Cyan]n2ip(s++)[/backcolor]}‘ 111.0.255.250 111.0.255.251 111.0.255.252 111.0.255.253 111.0.255.254 111.0.255.255 111.1.0.0 111.1.0.1 111.1.0.2 111.1.0.3 111.1.0.4 111.1.0.5 |
【拓展】
由于我学过postgreSQL。postgreSQL数据库拥有丰富的数据类型;用postgreSQL中的SQL来解决这类问题更好不过了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 |
postgres= # create table li0924(id int,ip_start inet,ip_stop inet); CREATE TABLE postgres= # insert into li0924 values (1,‘192.168.1.240‘,‘192.168.2.10‘); INSERT 0 1 postgres= # select * from li0924; id | ip_start | ip_stop ----+---------------+-------------- 1 | 192.168.1.240 | 192.168.2.10 (1 row) postgres= # select id, generate_series(0, ip_stop-ip_start)+ip_start as ip_new from li0924; id | ip_new ----+--------------- 1 | 192.168.1.240 1 | 192.168.1.241 1 | 192.168.1.242 1 | 192.168.1.243 1 | 192.168.1.244 1 | 192.168.1.245 1 | 192.168.1.246 1 | 192.168.1.247 1 | 192.168.1.248 1 | 192.168.1.249 1 | 192.168.1.250 1 | 192.168.1.251 1 | 192.168.1.252 1 | 192.168.1.253 1 | 192.168.1.254 1 | 192.168.1.255 1 | 192.168.2.0 1 | 192.168.2.1 1 | 192.168.2.2 1 | 192.168.2.3 1 | 192.168.2.4 1 | 192.168.2.5 1 | 192.168.2.6 1 | 192.168.2.7 1 | 192.168.2.8 1 | 192.168.2.9 1 | 192.168.2.10 |
awk文本处理案例二十六--IP段生成文本列表,布布扣,bubuko.com
原文:http://www.cnblogs.com/lottu/p/3573846.html