免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4972 | 回复: 4

[文本处理] 请教用gawk(Windows端程序)如何实现IP地址区间匹配? [复制链接]

论坛徽章:
0
发表于 2021-12-27 21:28 |显示全部楼层
$ cat ip_unit.txt
172.16.0.1 172.16.0.64 unit1
172.16.0.65 172.16.0.128 unit2
172.16.0.129 172.16.0.192 unit3
172.16.0.193 172.16.0.255 unit4
172.16.1.1 172.16.1.64 unit5
172.16.1.65 172.16.1.128 unit6
..........
第三列是单位信息,第一列是为该单位分配IP起始地址,第二列是为该单位分配IP终止地址。各列以空格为分隔符。
$ cat ip.txt
172.16.0.200
172.16.1.123
172.16.0.37
172.16.0.99
172.16.1.25
172.16.0.166
172.16.0.82
..........
要得到IP地址对应的单位信息
172.16.0.200 unit4
172.16.1.123 unit2
172.16.0.37 unit1
172.16.0.99 unit2
172.16.1.25 unit5
172.16.0.166 unit3
172.16.0.82 unit2
..........
请教用gawk(Windows端程序)如何实现?是不是有些难

论坛徽章:
6
15-16赛季CBA联赛之浙江
日期:2021-07-14 11:18:4315-16赛季CBA联赛之浙江
日期:2021-08-20 17:26:1015-16赛季CBA联赛之天津
日期:2021-09-01 10:56:4619周年集字徽章-19
日期:2021-10-12 11:08:032016科比退役纪念章
日期:2021-10-12 11:33:4515-16赛季CBA联赛之深圳
日期:2021-11-11 14:25:38
发表于 2021-12-28 10:46 |显示全部楼层
本帖最后由 a5love3n 于 2021-12-28 10:47 编辑
  1. awk -F"[. ]" 'NR==FNR{a[$1"."$2"."$3"."$4]=$9}NR>FNR{d=$0;$4=$4-($4 % 64)+1;print d" "a[$1"."$2"."$3"."$4]}' ip_unit.txt ip.txt
复制代码


172.16.0.200 unit4
172.16.1.123 unit6
172.16.0.37 unit1
172.16.0.99 unit2
172.16.1.25 unit5
172.16.0.166 unit3
172.16.0.82 unit2

论坛徽章:
0
发表于 2021-12-28 14:00 |显示全部楼层
本帖最后由 lv_sh 于 2021-12-31 11:28 编辑

谢谢a5love3n!高手!一行就搞定了,钦佩!
先前举的例子有些问题,如果IP地址区间不固定,如何实现准确匹配?
如:
$ cat ip_unit.txt
172.16.0.1 172.16.0.64 unit1
172.16.0.65 172.16.0.128 unit2
172.16.0.129 172.16.0.192 unit3
172.16.0.193 172.16.0.255 unit4
172.16.1.1 172.16.1.64 unit5
172.16.1.65 172.16.1.128 unit6
172.18.3.1 172.18.3.64 unit7
172.19.6.1 172.19.6.16 unit8
192.168.100.129 192.168.100.161 unit9
10.3.37.33 10.3.37.64 unit10
53.39.46.224 53.39.46.255 unit11

$ cat ip.txt
172.16.0.200
172.16.1.123
172.16.0.37
53.39.46.243
172.16.0.99
172.16.1.25
172.16.0.166
172.16.0.82
172.18.3.9
172.19.6.18
192.168.100.155
192.168.100.180
10.3.37.46
10.3.37.81
137.0.24.99


要得到IP地址对应的单位信息
172.16.0.200 unit4
172.16.1.123 unit2
172.16.0.37 unit1
53.39.46.243 unit11
172.16.0.99 unit2
172.16.1.25 unit5
172.16.0.166 unit3
172.16.0.82 unit2
172.18.3.9 unit7
172.19.6.18 unit8
192.168.100.155 unit9
192.168.100.180 No_such_unit
10.3.37.46 unit10
10.3.37.81 No_such_unit
137.0.24.99 No_such_unit


即无法匹配的在单位处标注“No_such_unit”,可以实现吗? 谢谢!



论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2021-12-31 16:20 |显示全部楼层
回复 3# lv_sh


  1. cat 1
  2. 172.16.0.1 172.16.0.64 unit1
  3. 172.16.0.65 172.16.0.128 unit2
  4. 172.16.0.129 172.16.0.192 unit3
  5. 172.16.0.193 172.16.0.255 unit4
  6. 172.16.1.1 172.16.1.64 unit5
  7. 172.16.1.65 172.16.1.128 unit6
  8. 172.18.3.1 172.18.3.64 unit7
  9. 172.19.6.1 172.19.6.16 unit8
  10. 192.168.100.129 192.168.100.161 unit9
  11. 10.3.37.33 10.3.37.64 unit10
  12. 53.39.46.224 53.39.46.255 unit11

  13. cat 2
  14. 172.16.0.200
  15. 172.16.1.123
  16. 172.16.0.37
  17. 53.39.46.243
  18. 172.16.0.99
  19. 172.16.1.25
  20. 172.16.0.166
  21. 172.16.0.82
  22. 172.18.3.9
  23. 172.19.6.18
  24. 192.168.100.155
  25. 192.168.100.180
  26. 10.3.37.46
  27. 10.3.37.81
  28. 137.0.24.99

  29. awk -F"[. ]" 'FILENAME==ARGV[1]{a[$9]=$1*2**24+$2*2**16+$3*2**8+$4;b[$9]=$5*2**24+$6*2**16+$7*2**8+$8}FILENAME==ARGV[2]{c=$1*2**24+$2*2**16+$3*2**8+$4;for(i in a){if(c>=a[i]&&c<=b[i]){d=i}};print $0,d?d:"No_such_unit";d=""}' 1 2
  30. 172.16.0.200 unit4
  31. 172.16.1.123 unit6
  32. 172.16.0.37 unit1
  33. 53.39.46.243 unit11
  34. 172.16.0.99 unit2
  35. 172.16.1.25 unit5
  36. 172.16.0.166 unit3
  37. 172.16.0.82 unit2
  38. 172.18.3.9 unit7
  39. 172.19.6.18 No_such_unit
  40. 192.168.100.155 unit9
  41. 192.168.100.180 No_such_unit
  42. 10.3.37.46 unit10
  43. 10.3.37.81 No_such_unit
  44. 137.0.24.99 No_such_unit
复制代码

论坛徽章:
0
发表于 2021-12-31 17:16 |显示全部楼层
谢谢 wh7211 !
太强了,完美!
学习中...



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP