免费注册 查看新帖 |

Chinaunix

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

新手求助 小程序组合在一起 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-27 14:18 |只看该作者 |倒序浏览
目标是计算日志文件中每个服务器每天的基尼系数。
数据格式:
日志文件是一天一个.log文件,其中包含所有服务器的。
IP|时间|服务器区号|QQ号|流水号|角色GUID|op_type|装备GUID|装备ID|当前强化(精炼)后等级

现在写了几个小程序:
1.筛选op_type=15|16; #15和16代表需要的强化(精炼)等级
2.按照服务器号排序; #可以省略
3.按服务器号抽取角色GUID|强化(精炼)等级; #以这个等级作为财富值
4.统计每个角色GUID的强化(精炼)等级和;
5.基尼系数计算。

现在困难是不知道怎么链接程序和一次性完成所有日志文件的处理。
希望好心人帮忙看看,身边都不学Perl。。。

五段小程序:
  1. #!/usr/bin/perl -w
  2. use 5.014;
  3. open(F,"equ.txt")or die "error:$!";
  4. while(<F>){
  5.         chomp;
  6.         my @array=split /\|/;
  7.         if($array[6]==15 or $array[6]==16){
  8.                 print "$array[2]|$array[5]|$array[9]\n";  #输出服务器区号、角色GUID、当前强化(精炼)等级
  9.         }else{next;}
  10.        
  11. }
  12. close F;
复制代码
  1. #!/usr/bin/perl -w
  2. use 5.014;
  3. open(F,"equ1.out")or die "error:$!";
  4. my @line;
  5. my @out;
  6. my $out;
  7. while(<F>){
  8.         chomp;
  9.     push @line, [ split /\|/];
  10.         }
  11.         @out = sort { $a->[0] <=> $b->[0] or $a->[1] <=> $b->[1] or  $a->[2] <=> $b->[2] }@line;
  12.     for $out (@out)
  13. {
  14.     print "@$out\n";
  15. }
  16.        
  17. close F;
复制代码
  1. #!/usr/bin/perl
  2. open(F,"equ2.out")or die "error:$!";
  3. while(<F>){
  4.         chomp;
  5.         @array=split; #切成数组
  6.         if($array[0]==0){
  7.                
  8.                 print "$array[1]|$array[2]\n";       
  9.         }                       
  10. }
  11. close F;
复制代码
  1. #!/usr/bin/perl -w
  2. open(F,"equ30.out")or die "error:$!";
  3. while(<F>){
  4.         chomp;
  5.         @array=split /\|/;
  6.         $freq{$array[0]}++;
  7.         $amount{$array[0]}+=$array[1];
  8. }
  9. close F;

  10. foreach $temp (sort {$amount{$b}<=>$amount{$a}} keys %freq) {
  11.         print $amount{$temp}.",";
  12. }#按照强化和精炼等级和排序,输出强化、精炼等级和。
复制代码
  1. #!/usr/bin/perl
  2. open(F,"equ4.out")or die "error:$!";
  3. while(<F>){
  4.         chomp;
  5.         my @origx=split /\,/;
  6.         my $gini=calc_gini(@origx);
  7.         print "$gini\n";
  8.         exit;

  9. sub calc_gini{
  10.         my @origx=@_;
  11.         my @x = sort { $a <=> $b } @origx;
  12.         my $ginisum=0;
  13.         my $sum=0;
  14.         my $count=@x;
  15.         for (my $i=1;$i<=$count;$i++) {
  16.                 $ginisum=$ginisum+(2*$i-$count-1)*$x[$i-1];
  17.                 $sum=$sum+$x[$i-1];
  18.         }
  19.         my $gini=$ginisum/($count-1)/$sum;
  20.         return $gini;
  21.         }
  22. }
  23. close F;
复制代码
新手刚学,程序写的简陋啰嗦了点。

论坛徽章:
0
2 [报告]
发表于 2013-12-27 14:22 |只看该作者
期待ing........

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
3 [报告]
发表于 2013-12-27 14:29 |只看该作者
目测楼主在企鹅工作

论坛徽章:
0
4 [报告]
发表于 2013-12-27 14:33 |只看该作者
回复 3# yestreenstars
不是的,希望Perl大侠们帮忙看看给点思路,囧。

   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
5 [报告]
发表于 2013-12-27 14:38 |只看该作者
你需要写第六个程序····· 把上面5个程序用system运行··· 或者用shell``

论坛徽章:
0
6 [报告]
发表于 2013-12-27 14:41 |只看该作者
回复 5# xiumu2280
小程序写的不完全,一次只能处理指定的一个服务器一天的基尼系数。不知道怎么修改了。。谢谢

   

论坛徽章:
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
7 [报告]
发表于 2013-12-27 14:52 |只看该作者
{:2_168:} 看得我都激动了...

论坛徽章:
0
8 [报告]
发表于 2013-12-27 14:57 |只看该作者
回复 7# pitonas
激动意味着有兴趣,那就帮忙看看吧,Thank you~
   

论坛徽章:
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
9 [报告]
发表于 2013-12-27 15:12 |只看该作者
{:2_172:} 小伙伴们, 你perl这么NB,这个代码高端大气上档次。
回复 8# ljw0316


   

论坛徽章:
8
技术图书徽章
日期:2013-09-30 08:51:28技术图书徽章
日期:2013-12-11 09:26:39白羊座
日期:2013-12-27 15:27:13金牛座
日期:2014-01-06 09:13:05天蝎座
日期:2014-01-21 14:23:28酉鸡
日期:2014-05-09 16:51:12卯兔
日期:2014-08-11 16:49:1515-16赛季CBA联赛之八一
日期:2017-08-14 23:24:57
10 [报告]
发表于 2013-12-27 15:12 |只看该作者
你是指 glob 函数?··
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP