免费注册 查看新帖 |

Chinaunix

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

求判断文本某一列是否在二维哈希元素里面 [复制链接]

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-28 15:49 |只看该作者 |倒序浏览
20可用积分
txt1:
61.129.42.44        20661804
14.17.43.33        17924178
113.107.189.203        16606778
183.61.1.155        16357922
119.161.221.195        13670173
121.14.125.52        12445962
220.181.155.177        12304506
183.57.144.43        11915029
121.11.94.183        11915010
119.161.219.19         11734110
14.17.37.102         11004048
14.17.37.103      11004048
txt2:
szlong.weixin.qq.com  14.17.43.33 14.17.52.146 183.61.49.148
ncmsr.mars.baofeng.net  113.107.189.203 183.61.1.172 221.235.188.125 61.191.62.46 183.61.177.56
ctzh.phn.p2p.baofeng.net  183.61.1.155 183.61.1.154
ntp.fudan.edu.cn  61.129.42.44 61.129.42.39
ntp.fudan.edu.cn  61.129.42.42
dev3.zypush.com  119.161.221.195
ntp.fudan.edu.cn  61.129.42.39
jpush.html5.qq.com  121.14.125.52
dynamic.app.m.leletv.net  220.181.155.177
letv.xdwscache.glb0.lxdns.com  183.57.144.43 121.11.94.183
dev9.zypush.com  119.161.219.19
opensdk.uu.qq.com  14.17.37.99 14.17.37.100 14.17.37.102 14.17.37.154 14.17.37.155 14.17.37.156 14.17.37.157 14.17.37.160 14.17.37.29 14.17.37.79
opensdk.uu.qq.com  14.17.37.102
uc6.gtm.ucweb.com  58.215.137.53
monitor.uu.qq.com  14.17.33.112 14.17.33.113 14.17.34.230 14.17.34.231 14.17.34.236 14.17.37.99 14.17.37.100 14.17.37.154 14.17.37.155 14.17.37.156 14.17.37.157
tpush.html5.qq.com  113.108.16.42

原则上是txt2 这个文件会根据域名出现n次重复,后面的域名有可能变化,需要先把txt2的根据域名合并,然后去掉重复
再根据txt1 指向该域名
最终的结果想要得到为:

ntp.fudan.edu.cn 20661804
szlong.weixin.qq.com 17924178
ncmsr.mars.baofeng.net 16606778
ctzh.phn.p2p.baofeng.net 16357922
dev3.zypush.com 13670173
jpush.html5.qq.com 12445962
dynamic.app.m.leletv.net  12304506
letv.xdwscache.glb0.lxdns.com 23830039(注意,这一块由于是相同域名,那么需要相加起来才可以哦)
dev9.zypush.com 11734110
opensdk.uu.qq.com 11004048
14.17.37.103      11004048  没有查到的话直接列出来就好

最后根据后面数字排序,分不够可以加
表示简单的文本对比还好,看到这个个人认为牵扯到二维数组地址前面还得加域名,就头大了

最佳答案

查看完整内容

{:2_179:}分不够

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
2 [报告]
发表于 2014-05-28 15:49 |只看该作者
{:2_179:}分不够
  1. #!/usr/bin/perl

  2. open my $t1, 'txt1';
  3. open my $t2, 'txt2';

  4. my ( %t1, %t2 );
  5. while (<$t2>) {
  6.     my ( $k, @v ) = split;
  7.     $t2{$_} = $k for @v;
  8. }

  9. while (<$t1>) {
  10.     my ( $k, $v ) = split;
  11.     $t1{ $t2{$k} || $k } += $v;
  12. }

  13. for my $i ( sort { $t1{$a} <=> $t1{$b} } keys %t1 ) {
  14.     printf "%-30s\t%d\n", $i, $t1{$i};
  15. }
  16. __DATA__

复制代码

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
3 [报告]
发表于 2014-05-28 15:56 |只看该作者
这个域名有三个 IP
szlong.weixin.qq.com  14.17.43.33 14.17.52.146 183.61.49.148

而只有一个 ip 有值,这种情况该是什么规则呢?

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
4 [报告]
发表于 2014-05-28 16:07 |只看该作者
本帖最后由 lockeyou 于 2014-05-28 16:09 编辑

因为dns跳的域名解析有好几个地址,我用处理工具处理后拿到真实的ip地址,然后再根据txt2相当于一个没有处理过的字典(PS需要根据域名,合并去重),
我用txt1的真实地址和txt2 的地址进行对比,拿出txt2的域名和txt1的流量,根据流量排序,
不知道说的明白不
实际上这种情况最多:最主要的是那txt1的ip放到txt2这个字典里查找,查到了,拿出域名,而且最终的结果域名可能重复,最后把重复的累加

回复 2# 104359176


   

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
5 [报告]
发表于 2014-05-28 16:45 |只看该作者
这道题目收费 10 元。支付宝账户请看签名。
  1. $ perl combin-liuliang.pl txt1.txt txt2.txt
  2. tpush.html5.qq.com 0
  3. dynamic.app.m.leletv.net 12304506
  4. jpush.html5.qq.com 12445962
  5. ntp.fudan.edu.cn 20661804
  6. ctzh.phn.p2p.baofeng.net 16357922
  7. monitor.uu.qq.com 0
  8. letv.xdwscache.glb0.lxdns.com 23830039
  9. dev3.zypush.com 13670173
  10. opensdk.uu.qq.com 11004048
  11. dev9.zypush.com 11734110
  12. uc6.gtm.ucweb.com 0
  13. szlong.weixin.qq.com 17924178
  14. ncmsr.mars.baofeng.net 16606778
  15. 14.17.37.103 11004048
复制代码

combin-liuliang.zip

1.6 KB, 下载次数: 24

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
6 [报告]
发表于 2014-05-28 16:52 |只看该作者
本帖最后由 lockeyou 于 2014-05-28 16:54 编辑

谢谢大牛回复,我看看效果
回复 4# pitonas

嗯,我也感觉20分不够,放心,解决问题我会追加分的哈


   

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
7 [报告]
发表于 2014-05-28 16:53 |只看该作者
要是没人解决的话,就买你代码了
回复 5# 104359176


   

论坛徽章:
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
8 [报告]
发表于 2014-05-28 17:04 |只看该作者
本帖最后由 huang6894 于 2014-05-28 17:08 编辑

菜鸟来一个~
  1. use 5.010;
  2. %f;
  3. %o;
  4. open(F1,"< f1") || die "$!";
  5. open(F2,"< f2") || die "$!";
  6. while (<F2>){
  7. @f2=split(/\t/,$_);
  8. map{$f{$_} = $f2[0]} @f2;
  9. }
  10. close F2;

  11. while(<F1>){
  12.         chomp;
  13.         ($k,$v)=(split/\t/,$_)[0,1];
  14.         $o{$f{"$k"}||"$k"}+=$v ;
  15. }
  16. close F1;
  17. while( ( $a,$b)  = each %o){
  18.         say "$a\t$b";
  19. }
复制代码

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
9 [报告]
发表于 2014-05-28 17:10 |只看该作者
已经解决,底下回复的没分了哈
楼层上面的都有分,那个让我买代码的大牛,
不好意思,有人贴代码.不过还是会给分的哈

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
10 [报告]
发表于 2014-05-28 17:18 |只看该作者
擦,怎么能给每个人都有分?需要我再开帖吗?怎么和csdn不一样??
回复 2# pitonas


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP