中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [求助]数值转换 上一主题 | 下一主题
ok1
新手上路





积分 17
发帖 6
注册 2007-7-29
状态 离线
『楼 主』:  [求助]数值转换

ip.txt 内容如下

  Quote:
1.1.0.0         1.1.0.255          IANA  CZ88.NET
3.0.0.0         3.255.255.255   美国 新泽西通用电气公司
4.0.0.0         4.10.255.255    美国  CZ88.NET
以下三十万行以上面相同数值。。。。。。。。。。。



  Quote:
1.1.0.0           转换      1*256*256*256+1*256*256+0*256+0 = 16842752
1.1.0.255 转换      1*256*256*256+1*256*256+0*256+255 = 16843007


转换成生成一个ip2.txt
16842752   16843007    IANA  CZ88.NET

以下几十万行数值都这样



2007-7-30 08:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 2 楼』:  



  Quote:
以下几十万行数值都这样

这一句话就把我吓住了。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-7-30 10:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ok1
新手上路





积分 17
发帖 6
注册 2007-7-29
状态 离线
『第 3 楼』:  

循环搞呀,才三十万行,

2007-7-30 11:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

用gawk试试。

2007-7-31 10:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ok1
新手上路





积分 17
发帖 6
注册 2007-7-29
状态 离线
『第 5 楼』:  

能给个源码不 偶是菜鸟

2007-7-31 19:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  

命令行执行:
gawk -f MyPro.awk ip.txt
MyPro.awk的内容如下:
BEGIN{
        infomations="如果你没有Gawk,可以从这里下载得到:\nhttp://www.cn-dos.net/forum/viewthread.php?tid=31098&page=1#pid205571\n"
        print infomations;
}

{
        if(($1~/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/)&&($2~/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/)){
                split($1,ip_first,".");
                split($2,ip_last,".");
                $1=$2=0;
                for(i=1;i<=4;i++){
                        if((ip_first[i]>256||ip_first[i]<0)||(ip_last[i]<0||ip_last[i]>256)){print "ERROR!!!\n\tBad IP-Address format!Exit...";exit;};
                        $1+=ip_first[i]*255**(4-i);
                        $2+=ip_last[i]*255**(4-i);
                }
                #print $0;
                #如果(print $0)不能满足要求,可以用下面这个来输出,格式要规矩些.
                printf("%11.0f %11.0f",$1,$2);
                $1=$2="";
                for(_=3;_<=NF;_++){printf "  "$_;}
                print "";
        }
}


2007-8-3 17:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ok1
新手上路





积分 17
发帖 6
注册 2007-7-29
状态 离线
『第 7 楼』:  

谢谢ing

2007-8-3 22:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 8 楼』:  

这个gawk资料一直还没有看呢。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-8-4 14:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: