中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]对ip段的整合,涉及超多次比较!
<   <<   [1] [2] [3]  >>
作者:
标题: [已结]对ip段的整合,涉及超多次比较! 上一主题 | 下一主题
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 31 楼』:  

明年开始我就不做移动的代维了,项目解散了,组员都走了。就剩下我了,boss说要调我去国税让我跟其他网络工程师学习网络,要学的东西可就多了。不过我也正好要学这方面。就好像算法里面的 IP换算成10进制一样,呵呵,昨晚还去翻了本CCNA的书才知道的。


2009-1-11 17:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 32 楼』:  我来追加一个(全精度的),16秒完成

@echo off SETLOCAL ENABLEDELAYEDEXPANSION title IP分段工具,开始时间是 %time% cd. >分段结果.txt set n= set _h1=1 echo.&echo.&echo.&echo. for /f "tokens=1-8,* delims=. " %%a in (ipdata.txt) do ( set _cu=0&set _e1=!_e!&set _f1=!_f!&set _g1=!_g!&set/a _h1=_h+1 if !_h!==255 (set _h1=0&set /a _g1=_g+1&if !_g!==255 (set _g1=0&set /a _f1=_f+1&if !_f!==255 (set _f1=0&set /a _e1=_e+1))) if "!_from!"=="" set _from=%%a.%%b.%%c.%%d if not !_e1!!_f1!!_g1!!_h1!==%%a%%b%%c%%d (if not "!_e!"=="" (echo !_from! !_e!.!_f!.!_g!.!_h! !_fi!>>分段结果.txt&set _from=%%a.%%b.%%c.%%d)) set _e=%%e&set _f=%%f&set _g=%%g&set _h=%%h set _fi=%%i set /a n+=1 set /p = 当前记录:!n!<nul ) echo. echo ******************** echo 结束时间是:%time% echo ******************** pause [ Last edited by netbenton on 2009-1-12 at 01:54 ]




精简 [你的+我的+他的]=>[大家的] 个人网志
2009-1-12 01:42
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 33 楼』:  思路很牛b

思路很牛b 但是我不需要全精度的, 最合适的精度是 C 段 的差 小于100 就整合,大于100 分开。 ------------ A1.B1.C1.D1 A2.B2.C2.D2 A3.B3.C3.D3 A4.B4.C4.D4 ------------------- 也就是当 A2.B2 = A3.B3 的时候比较 C2和C3 当 C2-C3<=100 的时候 2段整合为:A1.B1.C1.D1 A4.B4.C4.D4 如果 C2-C3>100 不整合。 这是最适合的精度。。


2009-1-12 05:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 34 楼』:  

全精度的代码执行起来需要很厂时间,大概有400万条数据处理。
@echo off
title 全自动ip搜索整理,开始时间是 %time%
SETLOCAL ENABLEDELAYEDEXPANSION
@del /f /q ok.txt 2>nul
set start1=
set n=0
for /f "tokens=1-8 delims=.	" %%a in (ip.txt) do (
        set /a n=!n!+1
        if #!start1!#==## (
                set start1=%%a&set start2=%%b
                SET /A oldnum2=%%a*256+%%b
                )
        SET /A nownum1=%%a*256+%%b
        if /i !nownum1! GTR !oldnum2! (
                echo !start1!.!start2!.%%c.%%d !end1!.!end2!.%%g.%%h>>ok.txt
rem                echo 输出IP段  !!start1!.!start2!.!start3!.!start4! --- !end1!.!end2!.!end3!.!end4!
                set start1=%%a&set start2=%%b
                )
        SET /A oldnum2=%%e*256+%%f+1
        set end1=%%e&set end2=%%f
        if /i !n! gtr 9999 (
                
                set n=0
                )
)
这是我修改 exzzz 发出的代码 处理完400万条数据在 10分钟以内 全精度的好象需要几个小时 [ Last edited by cz1314 on 2009-1-12 at 05:55 ]


2009-1-12 05:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 35 楼』:  

Originally posted by netbenton at 2009-1-12 01:42 AM: @echo off SETLOCAL ENABLEDELAYEDEXPANSION title IP分段工具,开始时间是 %time% cd. >分段结果.txt set n= set _h1=1 echo.&echo.&echo.&echo. for /f "tokens=1-8, ...
呵呵,我测试了一下,在我这台赛扬2.66的机器上, 将你我代码中所有有关 计数及屏显 的提示内容 rem 掉运行处理楼主提供的IPDATA.TXT。 你的算法需要14.3秒,我的算法用7.9秒。。。。。。


2009-1-12 12:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 36 楼』:  

我的处理纯真网络解压出来的ip数据36万多条记录(全精度) 用时04:41秒 结果只有一条: 0.0.0.0 255.255.255.255 纯真网络 2009年1月10日IP数据 [ Last edited by netbenton on 2009-1-12 at 20:16 ]




精简 [你的+我的+他的]=>[大家的] 个人网志
2009-1-12 20:09
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 37 楼』:  

哈哈! netbenton 真幽默。你的代码的确不错!!!


2009-1-13 00:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 38 楼』:  

Originally posted by netbenton at 2009-1-12 08:09 PM: 我的处理纯真网络解压出来的ip数据36万多条记录(全精度) 用时04:41秒 结果只有一条: 0.0.0.0 255.255.255.255 纯真网络 2009年1月10日IP数据 [ Last edited by netbenton on 2009-1-12 at 20:16 ]
呵呵,我的也是。


2009-1-13 10:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 39 楼』:  

但是我不需要全精度的, 最合适的精度是 C 段 的差 小于100 就整合,大于100 分开。 ------------ A1.B1.C1.D1 A2.B2.C2.D2 A3.B3.C3.D3 A4.B4.C4.D4 也就是当 A2.B2 = A3.B3 的时候比较 C2和C3 当 C2-C3<=100 的时候 2段整合为:A1.B1.C1.D1 A4.B4.C4.D4 如果 C2-C3>100 不整合。 这是最适合的精度。。 ...
那这样的也不整合吗? 1.0.0.15 1.1.255.255 1.2.0.0 1.2.12.17




精简 [你的+我的+他的]=>[大家的] 个人网志
2009-1-13 15:11
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 40 楼』:  大提速

::全精度比较 ::处理楼主的ipdata.txt 用5秒,处理纯真的36万数据用1分17秒 ::如果是400万数据,预计:13分左右 @echo off SETLOCAL ENABLEDELAYEDEXPANSION title IP分段工具,开始时间是 %time% cd. >分段结果.txt set n=0 call :sub echo.&echo.&echo.&echo. for /f "tokens=1-8,* delims=. " %%a in (ipdata.txt) do ( if !_h!==256 (set _h=0&set /a _g+=1&if !_g!==256 (set _g=0&set /a _f+=1&if !_f!==256 (set _f=0&set /a _e+=1))) if not !_e!!_f!!_g!!_h!==%%a%%b%%c%%d (echo !_fr! !_end!>>分段结果.txt&set _fr=%%a.%%b.%%c.%%d) set _end=%%e.%%f.%%g.%%h set _e=%%e&set _f=%%f&set _g=%%g&set/a _h=%%h+1 ) if not "!_g!"=="" echo !_fr! !_end!>>分段结果.txt echo ******************** echo 结束时间是:%time% echo ******************** pause goto :eof :sub for /f "tokens=1-8,* delims=. " %%a in (ipdata.txt) do ( set _fr=%%a.%%b.%%c.%%d set _e=%%a&set _f=%%b&set _g=%%c&set _h=%%d goto :eof ) [ Last edited by netbenton on 2009-1-15 at 20:46 ]




精简 [你的+我的+他的]=>[大家的] 个人网志
2009-1-13 15:20
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 41 楼』:  

Originally posted by netbenton at 2009-1-13 03:11 PM: 那这样的也不整合吗? 1.0.0.15 1.1.255.255 1.2.0.0 1.2.12.17
恩是个问题。但是可以用 (A2*65536+B2*256+C2)-(A2*65536+B3*256+C3)<>5 比较 这样可以吗? [ Last edited by cz1314 on 2009-1-14 at 00:30 ]


2009-1-14 00:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
<   <<   [1] [2] [3]  >>
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: