免费注册 查看新帖 |

Chinaunix

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

12及13楼方案结贴。。。如何把点分十进制的掩码转化为 缩写形式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-19 14:36 |只看该作者 |正序浏览
本帖最后由 skylove 于 2010-10-20 12:16 编辑

如题,把类似 /255.255.255.0 转化为 /24  ;/255.255.240.0 转化为 /20  ?

我目前用的笨办法 。。。vi 里用
  1. :%s/\/255.255.255.0/\/24/g
复制代码
这样的方式来操作的,缺点就是要执行多次,而且还是非自动化的;

当前想到的方案是

用case语句将 255=8,254=7,252=6 , 248=5,240=4。。128=1 这样对应起来,将 255.255.240.0 变成类似  8.8.4.0  再转为 8+8+4+0 到 bc里去得到答案。。。

想请问有更好的解决方案么?

论坛徽章:
0
14 [报告]
发表于 2010-10-20 12:15 |只看该作者
while read v1 v2
do
  ipcalc -p $v1 $v2 | awk -F= -v v=$v1 '{print v"/"$2}'
done < file
ywlscpl 发表于 2010-10-20 12:13



    谢谢 ywlscpl 兄~~~ 感谢,又更加深刻地学习了。。。。

论坛徽章:
0
13 [报告]
发表于 2010-10-20 12:13 |只看该作者
while read v1 v2
do
  ipcalc -p $v1 $v2 | awk -F= -v v=$v1 '{print v"/"$2}'
done < file

论坛徽章:
0
12 [报告]
发表于 2010-10-20 12:13 |只看该作者
又换了种方式。。。
  1. awk '{cmd="ipcalc -p "$0"| cut -c8- ";printf $1"\/";system( cmd )}' ip文件名
复制代码
这样终于搞定了,呵呵呵

论坛徽章:
0
11 [报告]
发表于 2010-10-20 11:52 |只看该作者
又遭遇问题了。。。ipcalc 不支持直接批量输入,重定向和管道也不ok,所以用了个依次按行读的方式来操作。。。
  1. awk getline ip文件 | while read line ;
  2. do
  3. awk '{printf $1"/"}';
  4. ipcalc -p $line | cut -c8-;
  5. done
复制代码
预期是读取每行的时候都执行
awk '{printf $1"/"}';
ipcalc -p $line | cut -c8-;

这两句,前者取出ip部分,后后者配上掩码。。。结果运行出来的结果却仿佛只有第一句每次执行了,第二句是在最后一次读行才执行一次。。。

源文件

202.127.0.0 255.255.192.0
202.127.128.0 255.255.128.0

执行结果

202.127.0.0/202.127.128.0/25

无法达到

202.127.0.0/26202.127.128.0/25

这样的效果(先没考虑换行问题)

论坛徽章:
0
10 [报告]
发表于 2010-10-19 16:40 |只看该作者
一点思路,查表法,如果系统不能安装ipcalc的话,自己写一个脚本全局替换也没多少时间,毕竟 mask 全表只有 /0 - /32
0.0.0.0 /0
......
255.255.255.255 /32

给一个netmask input , 输出一个 对应 CIDR output

论坛徽章:
0
9 [报告]
发表于 2010-10-19 15:36 |只看该作者
刚才造了个轮子,然后计算了一个IP和MARK的按位与,杯具的效率啊……

论坛徽章:
0
8 [报告]
发表于 2010-10-19 15:07 |只看该作者
回复  skylove


    关于IP计算的还是ipcalc来的方便,实在是IT民工居家旅行必备。

写自己造轮子搞 ...
expert1 发表于 2010-10-19 15:04



    惭愧,以前一直都是只有几十条,而且地址蛮规范的,几下用vi就替换完毕了。。。一直也没起心去找找好工具。。。 这次一次对付600多条,才来补课。。。多谢兄弟了~~~

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
7 [报告]
发表于 2010-10-19 15:04 |只看该作者
回复 6# skylove


    关于IP计算的还是ipcalc来的方便,实在是IT民工居家旅行必备。

写自己造轮子搞不好是个歪轮子

论坛徽章:
0
6 [报告]
发表于 2010-10-19 15:00 |只看该作者
数制转换,COPY记号一下

$echo "obase=16;255"|bc
FF
$echo "obase=2;255"|bc
11111111
$echo "obas ...
expert1 发表于 2010-10-19 14:53



这个方式我一开始考虑过,毕竟是正统的算法,后来觉得相对于ip转写这个特定需求而言。。。效率太低而且繁复所以放弃了
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP