免费注册 查看新帖 |

Chinaunix

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

怎么求指定列的和 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之山东
日期:2019-02-18 23:04:06
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-15 19:40 |只看该作者 |倒序浏览
我有一个文件夹,文件夹下面有很多文本,名称为JF010001_001,JF010001_02之类,然后每个文本里的内容格式一样,拿JF010001_001来说吧:
      x=1 y=2 z=8
      x=3 y=1 z=3
      x=2 y=5 z=4
      ...
然后还有一个单独的文本b,格式如下:
      JF010001_001 0 2
      JF010001_001 2 5
      JF010001_001 5 7
      JF010001_002 0 1
      JF010001_001 1 3
      ...
    其中第1列是对应文件夹a的文本编号,第二列是起始行号,每一个文本都是从0开始,比如JF010001_002的第一行也是从0开始,第3列是持续行数,拿b的第1行来说,就是要求JF010001_001的从第1行开始到第3行的x的和,y和z也一样
    请问这个脚本该怎么写啊,还望各位大神能不吝赐教,谢谢啦!

论坛徽章:
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-10-16 00:57 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %hData;
  5. open (my $fhR, '<', './b');
  6. while (local $_ = <$fhR>){
  7.     my ($fn, $id, $cnt) = split;
  8.     push (@{$hData{$fn}}, [$id, $cnt]);
  9. }
  10. close ($fhR);

  11. foreach my $fn (glob('JF*')){
  12.     my @aItems = @{$hData{$fn}};
  13.     next if (!@aItems);
  14.     open ($fhR, '<', $fn);
  15.     my @aT;
  16.     push (@aT, $_) for map {[/\d+/g]} <$fhR>;
  17.     close ($fhR);
  18.     foreach my $ra (sort {$a->[0] <=> $b->[0]} @aItems){
  19.         my ($n, $x, $y, $z);
  20.         $n++ if ($ra->[0]);
  21.         foreach ($ra->[0] .. $#aT){
  22.             last if ($n++ > $ra->[-1]);
  23.             $x += $aT[$_][0];
  24.             $y += $aT[$_][1];
  25.             $z += $aT[$_][-1];
  26.         }
  27.         print "$fn,@{$ra} \$x=$x, \$y = $y, \$z = $z\n";
  28.     }
  29. }
复制代码

论坛徽章:
1
15-16赛季CBA联赛之山东
日期:2019-02-18 23:04:06
3 [报告]
发表于 2016-10-16 15:12 |只看该作者
回复 2# sunzhiguolu

第6行的open里面的'<','./b'是什么意思啊?

论坛徽章:
1
15-16赛季CBA联赛之山东
日期:2019-02-18 23:04:06
4 [报告]
发表于 2016-10-16 15:12 |只看该作者
本帖最后由 很宅的男 于 2016-10-16 15:20 编辑

回复 2# sunzhiguolu


论坛徽章:
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
5 [报告]
发表于 2016-10-16 20:29 |只看该作者
回复 4# 很宅的男
第6行的open里面的'<','./b'是什么意思啊?
< 以读的方式将文本 ./b 与句柄相关联


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP