免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11931 | 回复: 9
打印 上一主题 下一主题

[文本处理] IP段生成文本列表 [复制链接]

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
1 [报告]
发表于 2014-02-24 10:25 |显示全部楼层
本帖最后由 关阴月飞 于 2014-02-24 10:26 编辑

回复 1# l3lf

提供一个思路:
  1. #bin/bash
  2. #将起止IP地址转为成数字:
  3. star=`echo $1 |awk -F. '{print $1*256^3+$2*256^2+$3*256+$4}'`
  4. end=`echo $2 |awk -F. '{print $1*256^3+$2*256^2+$3*256+$4}'`

  5. #生成两个IP之间所有地址
  6. seq $star $end |awk  '{i=$0;print int(i/256^3),int(i%256^3/256^2),int(i%256^3%256^2/256),i%256^3%256^2%256}' OFS=.
复制代码
运行方式:
xx.sh 开始IP 结束IP
例如:
xx.sh  192.168.1.1 192.168.2.1

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2014-02-24 11:42 |显示全部楼层
回复 12# jason680


    用函数封装一下,整体代码确实简洁 牛,学习了!

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
3 [报告]
发表于 2014-02-24 14:06 |显示全部楼层
本帖最后由 关阴月飞 于 2014-02-26 09:52 编辑

回复 15# l3lf


    从ip列表中读取记录,你把结果直接重定向一下就行了:
  1. [root@ awktest]# cat xx.sh
  2. #!/bin/bash
  3. while read LINE
  4. do
  5. #将起止IP地址转为成数字:
  6. star=`awk -F. '{print $1*256^3+$2*256^2+$3*256+$4}' <<<"${LINE%%-*}"`
  7. end=`awk -F. '{print $1*256^3+$2*256^2+$3*256+$4}' <<<"${LINE##*-}"`

  8. #生成两个IP之间所有地址
  9. seq $star $end |awk  '{i=$0;print int(i/256^3),int(i%256^3/256^2),int(i%256^3%256^2/256),i%256^3%256^2%256}' OFS=.
  10. done < ip_list.txt
  11. [root@ awktest]# cat ip_list.txt
  12. 192.168.1.2-192.168.1.6
  13. 172.16.0.5-172.16.0.10
  14. [root@ awktest]# ./xx.sh
  15. 192.168.1.2
  16. 192.168.1.3
  17. 192.168.1.4
  18. 192.168.1.5
  19. 192.168.1.6
  20. 172.16.0.5
  21. 172.16.0.6
  22. 172.16.0.7
  23. 172.16.0.8
  24. 172.16.0.9
  25. 172.16.0.10
  26. [root@ awktest]# ./xx.sh  >outfile.txt   
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
4 [报告]
发表于 2014-02-26 09:53 |显示全部楼层
本帖最后由 关阴月飞 于 2014-02-26 09:54 编辑

回复 19# l3lf


      哈哈,我犯了个低级错误,脚本第一行应该是  #!/bin/bash

    以后有些东西还是不要照抄呀,很多东西还是需要自己留意一下的。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
5 [报告]
发表于 2014-02-26 12:59 |显示全部楼层
回复 21# l3lf


请不要用sh xx.sh 这种方法运行脚本会损失很多bash特性,正确的方法应该是:
bash xx.sh

或者最好这样运行:
chmod 755 xx.sh
./xx.sh

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
6 [报告]
发表于 2014-02-27 10:22 |显示全部楼层
回复 24# l3lf


    邪门:

1. 把脚本执行过程贴出来看看:
    bash -x xx.sh

2. 确定一下ip_list.txt 的内容,格式是不是对的
   cat -A  ip_list.txt

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
7 [报告]
发表于 2014-02-27 18:41 |显示全部楼层
本帖最后由 关阴月飞 于 2014-02-27 18:44 编辑

回复 26# l3lf
你的系统版本是多少? awk版本是多少?
看看这两个命令的结果是不是也是科学计数法:
  1.   echo 192.168.1.2 |awk -F. '{print $1*256^3+$2*256^2+$3*256+$4}'
  2.    echo 192.168.10.6 |awk -F. '{print $1*256^3+$2*256^2+$3*256+$4}'
复制代码
  1.   echo 192.168.1.2 |awk -F. '{printf "%.f\n",$1*256^3+$2*256^2+$3*256+$4}'
  2.    echo 192.168.10.6 |awk -F. '{printf  "%.f\n",$1*256^3+$2*256^2+$3*256+$4}'
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
8 [报告]
发表于 2014-02-27 18:54 |显示全部楼层
回复 28# l3lf

把脚本中这两句:
star=`awk -F. '{print $1*256^3+$2*256^2+$3*256+$4}' <<<"${LINE%%-*}"`
end=`awk -F. '{print $1*256^3+$2*256^2+$3*256+$4}' <<<"${LINE##*-}"`

改成这样:
star=`awk -F. '{printf "%.f",$1*256^3+$2*256^2+$3*256+$4}' <<<"${LINE%%-*}"`
end=`awk -F. '{printf "%.f",$1*256^3+$2*256^2+$3*256+$4}' <<<"${LINE##*-}"`

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
9 [报告]
发表于 2014-02-27 19:05 |显示全部楼层
回复 30# l3lf


照例这样执行看看过程:
bash -x xx.sh

目测是seq也要指定格式:
把脚本中:
seq $star $end

改成
seq -f "%.f"  $star $end

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
10 [报告]
发表于 2014-03-03 14:36 |显示全部楼层
回复 33# 酋长海布里


$1*256^3   就是  $1 * 256 * 256 * 256  这样的一个数学运算
作用就是把IP地址转换成数字
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP