免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4776 | 回复: 8
打印 上一主题 下一主题

哈哈,不要嫌分少哈,求助一个哈希问题 [复制链接]

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-13 14:54 |只看该作者 |倒序浏览
5可用积分
txt1.txt
wsctcallngifdl01.dns.iqiyi.com  220.181.115.202 220.181.184.118 220.181.184.154 220.181.184.178 220.181.115.201
data.flurry.com  216.52.203.13
newloc.map.n.shifen.com  115.239.210.78
mobads.e.shifen.com  180.149.131.25
mobads-logs.baidu.com  220.181.112.82 111.13.100.173 123.125.114.195
mobads-logs.baidu.com  220.181.112.82 111.13.100.173
mobads-logs.baidu.com  220.181.112.82 111.13.100.173
mobads-logs.baidu.com  111.13.100.173  220.181.112.82 123.125.114.195
mobads-logs.baidu.com  220.181.112.82 111.13.100.173 123.125.114.196
txt2.txt
wsctcallngifdl01.dns.iqiyi.com  220.181.115.202 220.181.184.118 220.181.184.154 220.181.184.178 220.181.115.219 220.181.115.203
data.flurry.com  216.52.203.13
newloc.map.n.shifen.com  115.239.210.78
mobads.e.shifen.com  180.149.131.25
mobads-logs.baidu.com  220.181.112.82 111.13.100.173 123.125.114.195
mobads-logs.baidu.com  220.181.112.82 111.13.100.173
mobads-logs.baidu.com  220.181.112.82 111.13.100.173
mobads-logs.baidu.com  111.13.100.173  220.181.112.82 123.125.114.195

想要生成字典
dict.txt
wsctcallngifdl01.dns.iqiyi.com  220.181.115.202 220.181.184.118 220.181.184.154 220.181.184.178 220.181.115.201 220.181.115.219 220.181.115.203
data.flurry.com  216.52.203.13
newloc.map.n.shifen.com  115.239.210.78
mobads.e.shifen.com  180.149.131.25
mobads-logs.baidu.com  220.181.112.82 111.13.100.173 123.125.114.195 123.125.114.196

其实我的想法是把每个txt做成一个哈希
前面第一列域名作为key ,的地址做value
然后value又重复的不计,没有的在后面累加就好
不过我现在能做的只有是根据模块
use List::MoreUtils qw/ uniq /;

先把两个文件写成一个文件
然后存成数组,每一行作为一个元素进行去重复,但是这样的话元素如果位置不一样或者元素里面个数不一样就不能合并
希望大牛指点

最佳答案

查看完整内容

update 一个 @pitonas 大神给的代码~我总算明白怎么老觉得自己写的不自然了,小伙伴们赶紧get起来~

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
2 [报告]
发表于 2014-06-13 14:54 |只看该作者
本帖最后由 huang6894 于 2014-06-14 12:00 编辑







update 一个 @pitonas 大神给的代码~
我总算明白怎么老觉得自己写的不自然了,小伙伴们赶紧get起来~
  1. #!/usr/bin/perl

  2. my %dic;
  3. while (<DATA>) {
  4.     my ( $k, @v ) = split;
  5.     $dic{$k}{$_} = 1 for @v;
  6. }

  7. while ( my ( $k, $v ) = each %dic ) {
  8.     print join( $", $k, keys %$v ), $/;
  9. }

  10. __DATA__
  11. wsctcallngifdl01.dns.iqiyi.com  220.181.115.202 220.181.184.118 220.181.184.154 220.181.184.178 220.181.115.201
  12. data.flurry.com  216.52.203.13
  13. newloc.map.n.shifen.com  115.239.210.78
  14. mobads.e.shifen.com  180.149.131.25
  15. mobads-logs.baidu.com  220.181.112.82 111.13.100.173 123.125.114.195
  16. mobads-logs.baidu.com  220.181.112.82 111.13.100.173
  17. mobads-logs.baidu.com  220.181.112.82 111.13.100.173
  18. mobads-logs.baidu.com  111.13.100.173  220.181.112.82 123.125.114.195
  19. mobads-logs.baidu.com  220.181.112.82 111.13.100.173 123.125.114.196
  20. txt2.txt
  21. wsctcallngifdl01.dns.iqiyi.com  220.181.115.202 220.181.184.118 220.181.184.154 220.181.184.178 220.181.115.219 220.181.115.203
  22. data.flurry.com  216.52.203.13
  23. newloc.map.n.shifen.com  115.239.210.78
  24. mobads.e.shifen.com  180.149.131.25
  25. mobads-logs.baidu.com  220.181.112.82 111.13.100.173 123.125.114.195
  26. mobads-logs.baidu.com  220.181.112.82 111.13.100.173
  27. mobads-logs.baidu.com  220.181.112.82 111.13.100.173
  28. mobads-logs.baidu.com  111.13.100.173  220.181.112.82 123.125.114.195
复制代码

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
3 [报告]
发表于 2014-06-13 15:03 |只看该作者
  1. hash{$str}{$IP} = 1

  2. for h (keys %hash) {
  3.    print "$h "
  4.    for IP (keys %$hash{$h}) {
  5.       print "$IP, "
  6.    }
  7.    print "\n"
  8. }
复制代码

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
4 [报告]
发表于 2014-06-13 15:06 |只看该作者
哥~一个key只能对应一个value。你应该拿IP做key,域名作value

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
5 [报告]
发表于 2014-06-13 15:29 |只看该作者
回复 2# q1208c

hash{$str}{$IP} = 1 #这个1代表什么,代表txt文件?
for h (keys %hash) { #还有不理解的就是这个h了,方便的话求解
   print "$h "
   for IP (keys %$hash{$h}) {
          print "$IP, "
   }
   print "\n"
}


   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
6 [报告]
发表于 2014-06-13 16:06 |只看该作者
回复 4# lockeyou

"1" 是随便给了一个值. 没什么特别的意思.

h是 for 循环的 值是 是 keys %hash 中的 每个key .


意思就是每个域名为第一层的KEY, 每个IP为第二层的KEY. 这样, 就可以解决 域名 和 IP 重复的问题了.

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
7 [报告]
发表于 2014-06-13 17:10 |只看该作者
回复 6# huang6894


    你的小羊驼真的很厉害呀,哈哈不错不错

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
8 [报告]
发表于 2014-06-16 10:53 |只看该作者
回复 2# huang6894
虽然新技能,但是感觉还到不了那一步,还是看你的代码好受点


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP