- 论坛徽章:
- 16
|
搞个难点的,效率未知,请自测。以下所有都不解释,自己想。
1。首先sort -t\. -k1,1n -k2,2n -k3,3n -k4,4n ip段 >ip_range
2。- awk '
- function ip2n(ip) { split(ip,a,"."); return a[1]*256^3+a[2]*256^2+a[3]*256+a[4] }
- BEGIN {FS="[-: ]+"}
- NR==FNR {
- fuck[k++] = $0;next }
- {
- start = 0
- end = k - 1
- while(start <= end) {
- mid =int(start+ ((end - start)/2))
- split(fuck[mid], kao)
- if(ip2n($1) < ip2n(kao[1]))
- end = mid-1
- else if(ip2n($1) > ip2n(kao[2]))
- start = mid+1
- else {
- print $0 " in \t\t"fuck[mid]
- break
- }
- }
- }' ip_range ip
复制代码 ===================
至于效率自己想,到底哪个好看你的情况了。不解释,懒得打字,想研究的话自己搜搜。
后记:第一次在某个群里发了这个东西,某个人说我“闲的无聊,搞这个有什么用”,当时我很淡定的冷笑了懒得回他。无知者无畏,没用的话大师们也不会搞这个二分查找算法。关键看你脑子想得到没有,前人把轮子造好了,你不会用还怪轮子歪,只能说明自己浅薄无知。
希望他能看到这个贴,当然看不到也没关系,我以前也有过类似的想法,只要不断进步,就会发现自己的无知和浅薄。
最后一句:There is no limit to learn,继续谦虚学习呵呵。
楼上和这个我都测试过OK了,有问题也不要联系我 ,打印的结果不符合要求自己改。
附我测试的文件格式如下。
~# cat ip_rang- .........省略若干...........
- 60.63.0.0 - 60.63.255.255
- ......省略若干.......
复制代码 ~#cat ip- ....... 省略若干.....
- 192.168.0.100:caodan
- .......省略若干。。。
复制代码 |
|