免费注册 查看新帖 |

Chinaunix

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

shell计算网段计算机个数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-21 15:15 |只看该作者 |倒序浏览
请教大家一个写法  比如知道一个ip的开始和结束   怎么用shell计算出共有多少个ip呢 ?

如 061.243.212.000--------------061.243.213.255


                       谢谢

论坛徽章:
0
2 [报告]
发表于 2006-10-21 15:28 |只看该作者
echo "061.243.212.000--------------061.243.213.255" |awk -F'[.-]' '
{
        print ($NF-$4+1) * ($(NF-1)-$3+1) * ($(NF-2)-$2+1) * ($(NF-3)-$1+1)
}'

论坛徽章:
0
3 [报告]
发表于 2006-10-21 16:17 |只看该作者

谢谢你!

再请教:文件a 内容格式如下:(表示一个网段开始和结束的ip)

  1. 218.022.121.000 218.022.127.255                  
  2. 218.022.128.000 218.022.143.255                  
  3. 等等
复制代码

求用shell计算生成如下格式

  1. 218.022.121.000 ip个数
  2. 218.022.128.000 ip个数
  3. 等等
复制代码


                      谢谢了

论坛徽章:
0
4 [报告]
发表于 2006-10-21 20:19 |只看该作者
。。上面已经差不多了阿。。

论坛徽章:
0
5 [报告]
发表于 2006-10-21 20:27 |只看该作者
还是给写一下吧

  1. awk -F'[. -]' '
  2. {
  3.         print $1"."$2"."$3"."$4, ($NF-$4+1) * ($(NF-1)-$3+1) * ($(NF-2)-$2+1) * ($(NF-3)-$1+1)
  4. }'  a
复制代码

论坛徽章:
0
6 [报告]
发表于 2006-10-21 20:58 |只看该作者

  1. perl -e 'while(<>){$tmp=$_;s/(\d+)\.(\d+).(\d+)\.(\d+)[\W]+(\d+)\.(\d+)\.(\d+)\.(\d+)/((\5-\1+1)*(\6-\2+1)*(\7-\3+1)*(\8-\4+1))/;$_=eval $_;$tmp=~s/[\s-].*/ $_个IP/;print $tmp}'
复制代码

无聊写perl练手
方法都差不多没什么新鲜

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-10-21 22:57 |只看该作者
原帖由 awk就是awp加ak 于 2006-10-21 20:27 发表
还是给写一下吧

  1. awk -F'[. -]' '
  2. {
  3.         print $1"."$2"."$3"."$4, ($NF-$4+1) * ($(NF-1)-$3+1) * ($(NF-2)-$2+1) * ($(NF-3)-$1+1)
  4. }'  a
复制代码

excellent

论坛徽章:
0
8 [报告]
发表于 2006-10-23 10:42 |只看该作者

运行结果 如下

原帖由 awk就是awp加ak 于 2006-10-21 20:27 发表
还是给写一下吧

  1. awk -F'[. -]' '
  2. {
  3.         print $1"."$2"."$3"."$4, ($NF-$4+1) * ($(NF-1)-$3+1) * ($(NF-2)-$2+1) * ($(NF-3)-$1+1)
  4. }'  a
复制代码



  1. 219.137.248.000 219 -446464
  2. 061.145.069.040 22913280
  3. 061.145.069.080 46414080
  4. 061.145.069.112 65214720
  5. 061.145.069.188 109866240
复制代码


怎么还有负数出现的个数呢? 出现负数的ip段是 219.137.248.000 219.137.255.255

论坛徽章:
0
9 [报告]
发表于 2006-10-23 11:00 |只看该作者
219.137.248.000 219 -446464

按照5楼的代码应该不能输出这样的结果。

论坛徽章:
0
10 [报告]
发表于 2006-10-23 12:02 |只看该作者

按照五楼的做法结果有些算出来是空的


  1. vi test1.sh
  2. #! /bin/bash
  3. perl -e 'while(<>){$tmp=$_;s/(\d+)\.(\d+).(\d+)\.(\d+)[\W]+(\d+)\.(\d+)\.(\d+)\.(\d+)/((\5-\1+1)*(\6-\2+1)*(\7-\3+1)*(\8-\4+1))/;$_=eval $_;$tmp=~s/[\s-].*/ $_/;print $tmp}' a

复制代码



  1. [root@root test]# vi a
  2. 218.022.121.000 218.022.127.255
  3. 218.022.128.000 218.022.143.255
  4. 058.060.000.000 058.061.095.255
  5. 058.061.096.000 058.061.255.255
  6. 058.062.000.000 058.062.063.255
  7. 058.062.064.000 058.062.079.255
  8. 058.062.080.000 058.063.038.135
  9. 058.063.038.144 058.063.095.255
复制代码


运行结果

  1. [root@aorta test]# sh test1.sh
  2. 218.022.121.000 1792
  3. 218.022.128.000 4096
  4. 058.060.000.000
  5. 058.061.096.000
  6. 058.062.000.000
  7. 058.062.064.000
  8. 058.062.080.000
  9. 058.063.038.144
复制代码

除了前面两个可以算出ip个数  后面的都没有算出ip的个数

再帮我看看    谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP