Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1092145
  • 博文数量: 186
  • 博客积分: 4939
  • 博客等级: 上校
  • 技术积分: 2075
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 17:15
文章分类

全部博文(186)

文章存档

2018年(1)

2017年(3)

2016年(11)

2015年(42)

2014年(21)

2013年(9)

2012年(18)

2011年(46)

2010年(35)

分类:

2010-11-03 10:31:48

本人的回复:
awk '                      
# author :expert1
# last-update:2010-10-18
#
function ip2n(ip) { split(ip,a,"."); return a[1]*256^3+a[2]*256^2+a[3]*256+a[4] }
NR==FNR{t[$1]=$3;b[$1]=$2;next}
  { for (i in t)
     if(ip2n($0)>=i &&ip2n($0) <= t[i])
    
      {print $0 "  in\t" b[i];break}
     
   }' f2 f1
 
原文
 
顺便贴上本人写的二分查找,这2个是同类问题
 
1。首先sort -t\. -k1,1n -k2,2n -k3,3n -k4,4n ip段 >ip_range

2。
  1. awk ' 
  2. #作者:expert1                      
  3. function ip2n(ip) { split(ip,a,"."); return a[1]*256^3+a[2]*256^2+a[3]*256+a[4] }

  4. BEGIN {FS="[-: ]+"}      

  5. NR==FNR {

  6.        fuck[k++] = $0;next }

  7.      {               

  8.         start = 0

  9.         end = k - 1        

  10.         while(start <= end) {

  11.               mid =int(start+ ((end - start)/2))
  12.                 split(fuck[mid], kao)

  13.                 if(ip2n($1) < ip2n(kao[1]))

  14.                         end = mid-1

  15.                 else if(ip2n($1) > ip2n(kao[2]))

  16.                         start = mid+1

  17.                 else {
  18.                        print $0 " in \t\t"fuck[mid]

  19.                         break

  20.                 }

  21.         }
  22. }'  ip_range ip
 
阅读(1321) | 评论(0) | 转发(0) |
0

上一篇:补全IP

下一篇:过滤相同的列

给主人留下些什么吧!~~