免费注册 查看新帖 |

Chinaunix

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

Perl 脚本求教!!! [复制链接]

论坛徽章:
2
15-16赛季CBA联赛之浙江
日期:2016-04-26 14:03:26程序设计版块每日发帖之星
日期:2016-04-29 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-12-19 19:12 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2016-12-19 22:19 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %hData = ();
  5. while (<DATA>){
  6.     my ($n, $v) = split;
  7.     my $pos = int ($n / 100);
  8.     push (@{$hData{$pos}{'L'}}, $n);
  9.     push (@{$hData{$pos}{'V'}}, $v);
  10. }

  11. foreach (keys %hData){
  12.     my $intInfo = join ('-', @{$hData{$_}{'L'}}[0,-1]);
  13.     my $sum = 0;
  14.     $sum += $_ for @{$hData{$_}{'V'}};
  15.     $sum /= @{$hData{$_}{'V'}};
  16.     print join ("\t", $intInfo, $sum), "\n";
  17. }

  18. __DATA__
  19. 0 1
  20. 5 0.064999
  21. 87 0.074467
  22. 101 0.053001
  23. 110 0.064052
  24. 231 1
  25. 244 0.000945
  26. 251 1
  27. 351 0.114801
  28. 357 0.005302
  29. 372 0.000127
  30. 488 1
  31. 489 0.674773
  32. 489 0.129187
  33. 593 0.024282
  34. 594 0.000234
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
3 [报告]
发表于 2016-12-19 23:32 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. sub Display{
  5.     my ($pos, $rh) = @_;
  6.     my $intInfo = join ('-', @{delete ($rh->{$pos}{'L'})}[0,-1]);
  7.     my @aVals = map {@$_} delete ($rh->{$pos}{'V'});
  8.     my $sum = 0;
  9.     $sum += $_ for @aVals;
  10.     print join ("\t", $intInfo, ($sum / @aVals)), "\n";
  11. }

  12. my ($lastPos, %hData) = (0, ());
  13. while (<DATA>){
  14.     my ($n, $v) = split;
  15.     my $pos = int ($n / 100);
  16.     push (@{$hData{$pos}{'L'}}, $n);
  17.     push (@{$hData{$pos}{'V'}}, $v);
  18.     next if ($lastPos == $pos);
  19.     Display ($lastPos, \%hData);
  20.     $lastPos = $pos;
  21. }

  22. Display ($lastPos, \%hData);

  23. __DATA__
  24. 0 1
  25. 5 0.064999
  26. 87 0.074467
  27. 101 0.053001
  28. 110 0.064052
  29. 231 1
  30. 244 0.000945
  31. 251 1
  32. 351 0.114801
  33. 357 0.005302
  34. 372 0.000127
  35. 488 1
  36. 489 0.674773
  37. 489 0.129187
  38. 593 0.024282
  39. 594 0.000234
复制代码

论坛徽章:
2
15-16赛季CBA联赛之浙江
日期:2016-04-26 14:03:26程序设计版块每日发帖之星
日期:2016-04-29 06:20:00
4 [报告]
发表于 2016-12-20 09:03 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
5 [报告]
发表于 2016-12-20 10:16 |只看该作者

  1. echo '0 1
  2. 5 0.064999
  3. 87 0.074467
  4. 101 0.053001
  5. 110 0.064052
  6. 231 1
  7. 244 0.000945
  8. 251 1
  9. 351 0.114801
  10. 357 0.005302
  11. 372 0.000127
  12. 488 1
  13. 489 0.674773
  14. 489 0.129187
  15. 593 0.024282
  16. 594 0.000234'|awk '{k=int($1/100);a[k]+=$2;b[k]++}END{for(i in a){print (i>0)?i*100+1"-"(i+1)*100:0"-"100,a[i]/b[i]}}'
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2016-12-22 15:49 |只看该作者
本帖最后由 sunzhiguolu 于 2016-12-22 15:52 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my @aData = ();
  5. while (<DATA>){
  6.     my ($n, $v) = split;
  7.     my $pos = int ($n / 100);
  8.     push (@{$aData[$pos]{'L'}}, $n);
  9.     $aData[$pos]{'C'}++;
  10.     $aData[$pos]{'V'} += $v;
  11. }

  12. for (@aData){
  13.     my $str = join ('-', (@{$_->{'L'}})[0,-1]);
  14.     local $_ = join ("\t", $str, $_->{'V'} / $_->{'C'}) . "\n";
  15.     print;
  16. }

  17. __DATA__
  18. 0   1
  19. 5   0.064999
  20. 87  0.074467
  21. 101 0.053001
  22. 110 0.064052
  23. 231 1
  24. 244 0.000945
  25. 251 1
  26. 351 0.114801
  27. 357 0.005302
  28. 372 0.000127
  29. 488 1
  30. 489 0.674773
  31. 489 0.129187
  32. 593 0.024282
  33. 594 0.000234
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP