免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1881 | 回复: 7

怎么求不同列数据的和 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之山东
日期:2019-02-18 23:04:06
发表于 2016-10-15 12:44 |显示全部楼层
本帖最后由 很宅的男 于 2016-10-15 12:45 编辑

我有一个文本,都是图里那样的数据,然后我需要将每一行的第1,2,4,6,9,10,15列求和作为num1,第3,5,7,22,33,45,52,66,73,75,78列求和作为num2,意思就是每一行的数据都求得一个num1和num2,请问这个该怎么处理啊,还望各位大神不吝赐教,谢谢啦,数据是下面图里这样的
  1. -0.4976308 -15.11435 -14.07319 -14.73652 -12.40263 -8.919751 -9.241934 -13.30885 -12.94467 -0.9947345 -5.289194 -15.20705 -4.435282 -14.33005 -12.56616 -9.570408 -13.50989 -12.99365 -13.17705 -7.68175 -15.09027 -14.40681 -7.388959 -14.79304 -9.430817 -13.30785 -13.91133 -15.14624 -13.26448 -16.24634 -14.42035 -14.69762 -13.06907 -13.92113 -6.599867 -16.11545 -13.5238 -12.33458 -13.81118 -17.78513 -14.51113 -9.610849 -17.75916 -13.19057 -15.87737 -13.18622 -13.2493 -14.39678 -10.79917 -12.00336 -11.80744 -14.28799 -13.08898 -9.319864 -6.151532 -10.67372 -13.72164 -15.97973 -13.44776 -11.5431 -13.328 -12.77358 -13.76712 -15.92707 -15.62565 -12.35836 -13.36001 -12.1712 -13.81794 -14.80945 -13.93962 -16.30116 -15.29088 -13.9798 -15.17189 -14.02892 -12.32962 -13.34761 -14.4769 -10.4759 -10.59203 -14.15576 -14.50003 -11.90241
  2.   -0.4286098 -15.52006 -14.45782 -15.2543 -13.24257 -9.269724 -10.26199 -14.0871 -13.66951 -1.075447 -5.902932 -15.73346 -6.433881 -14.54199 -12.97235 -9.749544 -13.859 -14.1427 -13.60229 -8.310029 -15.9679 -15.09697 -8.309935 -15.37859 -9.709194 -14.48385 -14.16212 -15.14511 -14.18556 -16.76377 -15.23199 -14.80561 -13.38114 -14.23376 -7.670321 -16.29078 -13.96735 -13.11451 -14.75158 -18.19124 -14.68001 -10.3726 -17.67229 -13.65772 -16.30698 -13.89289 -13.84066 -14.66229 -11.78291 -12.34134 -12.1313 -14.665 -14.03426 -9.762534 -6.372837 -11.97964 -13.92416 -16.58524 -14.24846 -12.02597 -14.01888 -13.31605 -14.15019 -16.47414 -16.03258 -12.84001 -14.24505 -13.22556 -14.33402 -15.75712 -14.30599 -16.98488 -15.82252 -14.80179 -15.48194 -14.90501 -12.82919 -13.86764 -14.9104 -11.22907 -11.23529 -14.67976 -14.7315 -13.07469
  3.   -1.407606 -16.63401 -15.78677 -16.40566 -13.96257 -9.947814 -12.35092 -15.84898 -15.39898 -0.2834675 -7.599322 -16.54792 -8.810485 -15.43032 -14.19443 -10.61562 -15.15086 -14.96657 -14.77213 -9.272371 -17.07794 -16.18598 -9.349135 -17.39947 -10.03151 -15.168 -15.89794 -16.1815 -15.2898 -18.44517 -16.70693 -15.6817 -14.98709 -15.36911 -9.468055 -17.41581 -16.07729 -14.3609 -15.89422 -18.68872 -15.63012 -11.15275 -18.49503 -15.25231 -17.79704 -14.7153 -15.23469 -16.13481 -12.59719 -13.49086 -13.29572 -16.22273 -15.04676 -11.53689 -6.890083 -12.90961 -15.45628 -17.73734 -15.33503 -12.92463 -15.57033 -14.39363 -14.95296 -18.19589 -16.90211 -13.96898 -15.42962 -14.20542 -15.55846 -16.80651 -15.69116 -17.51481 -16.65879 -15.35144 -16.98952 -16.04203 -14.04878 -14.77489 -16.29472 -12.36932 -12.51198 -15.84785 -15.90687 -13.95969
  4.   -1.670697 -17.28426 -16.54206 -17.0227 -15.0848 -10.73576 -11.82213 -17.03536 -15.37032 -0.2103624 -7.506705 -17.31507 -8.714831 -16.38946 -14.77559 -11.24024 -15.72946 -15.84373 -15.39054 -9.38194 -17.15216 -16.83245 -9.4044 -17.2743 -10.85152 -16.12691 -16.37608 -16.95311 -15.66724 -18.8772 -17.19494 -16.53568 -15.62062 -16.08315 -9.035169 -18.35178 -16.05381 -15.24209 -16.3152 -19.86281 -16.14577 -11.53979 -20.03139 -15.79156 -18.97156 -15.2024 -15.55318 -16.94276 -13.25168 -13.83774 -13.95615 -16.39097 -15.78281 -11.99277 -7.605853 -13.74642 -16.11603 -18.95016 -15.55747 -13.10882 -16.0825 -15.07232 -15.79594 -18.88714 -17.62956 -14.38717 -15.72376 -14.97782 -15.61193 -18.18128 -16.65086 -19.39635 -17.83264 -16.94934 -18.02247 -16.56574 -14.58484 -15.54829 -16.88283 -12.82989 -12.91461 -16.794 -16.8455 -14.49151
复制代码




论坛徽章:
0
发表于 2016-10-15 13:19 |显示全部楼层
use List::Util qw /sum/;
use warnings;
use strict;

my @num1 = map {$_-1}(1,2,4,6,9,10,15);
my @num2 = map {$_-1}(3,5,7,22,33,45,52,66,73,75,7;

while(<DATA> {
        my @array = split / /, $_;
        print "  Num1 = ", sum(@array[@num1]);
        print "  Num2 = ", sum(@array[@num2]);
        print "\n";
}

__DATA__
-0.4976308 -15.11435 -14.07319 -14.73652 -12.40263 -8.919751 -9.241934 -13.30885 -12.94467 -0.9947345 -5.289194 -15.20705 -4.435282 -14.33005 -12.56616 -9.570408 -13.50989 -12.99365 -13.17705 -7.68175 -15.09027 -14.40681 -7.388959 -14.79304 -9.430817 -13.30785 -13.91133 -15.14624 -13.26448 -16.24634 -14.42035 -14.69762 -13.06907 -13.92113 -6.599867 -16.11545 -13.5238 -12.33458 -13.81118 -17.78513 -14.51113 -9.610849 -17.75916 -13.19057 -15.87737 -13.18622 -13.2493 -14.39678 -10.79917 -12.00336 -11.80744 -14.28799 -13.08898 -9.319864 -6.151532 -10.67372 -13.72164 -15.97973 -13.44776 -11.5431 -13.328 -12.77358 -13.76712 -15.92707 -15.62565 -12.35836 -13.36001 -12.1712 -13.81794 -14.80945 -13.93962 -16.30116 -15.29088 -13.9798 -15.17189 -14.02892 -12.32962 -13.34761 -14.4769 -10.4759 -10.59203 -14.15576 -14.50003 -11.90241
-0.4286098 -15.52006 -14.45782 -15.2543 -13.24257 -9.269724 -10.26199 -14.0871 -13.66951 -1.075447 -5.902932 -15.73346 -6.433881 -14.54199 -12.97235 -9.749544 -13.859 -14.1427 -13.60229 -8.310029 -15.9679 -15.09697 -8.309935 -15.37859 -9.709194 -14.48385 -14.16212 -15.14511 -14.18556 -16.76377 -15.23199 -14.80561 -13.38114 -14.23376 -7.670321 -16.29078 -13.96735 -13.11451 -14.75158 -18.19124 -14.68001 -10.3726 -17.67229 -13.65772 -16.30698 -13.89289 -13.84066 -14.66229 -11.78291 -12.34134 -12.1313 -14.665 -14.03426 -9.762534 -6.372837 -11.97964 -13.92416 -16.58524 -14.24846 -12.02597 -14.01888 -13.31605 -14.15019 -16.47414 -16.03258 -12.84001 -14.24505 -13.22556 -14.33402 -15.75712 -14.30599 -16.98488 -15.82252 -14.80179 -15.48194 -14.90501 -12.82919 -13.86764 -14.9104 -11.22907 -11.23529 -14.67976 -14.7315 -13.07469
-1.407606 -16.63401 -15.78677 -16.40566 -13.96257 -9.947814 -12.35092 -15.84898 -15.39898 -0.2834675 -7.599322 -16.54792 -8.810485 -15.43032 -14.19443 -10.61562 -15.15086 -14.96657 -14.77213 -9.272371 -17.07794 -16.18598 -9.349135 -17.39947 -10.03151 -15.168 -15.89794 -16.1815 -15.2898 -18.44517 -16.70693 -15.6817 -14.98709 -15.36911 -9.468055 -17.41581 -16.07729 -14.3609 -15.89422 -18.68872 -15.63012 -11.15275 -18.49503 -15.25231 -17.79704 -14.7153 -15.23469 -16.13481 -12.59719 -13.49086 -13.29572 -16.22273 -15.04676 -11.53689 -6.890083 -12.90961 -15.45628 -17.73734 -15.33503 -12.92463 -15.57033 -14.39363 -14.95296 -18.19589 -16.90211 -13.96898 -15.42962 -14.20542 -15.55846 -16.80651 -15.69116 -17.51481 -16.65879 -15.35144 -16.98952 -16.04203 -14.04878 -14.77489 -16.29472 -12.36932 -12.51198 -15.84785 -15.90687 -13.95969
-1.670697 -17.28426 -16.54206 -17.0227 -15.0848 -10.73576 -11.82213 -17.03536 -15.37032 -0.2103624 -7.506705 -17.31507 -8.714831 -16.38946 -14.77559 -11.24024 -15.72946 -15.84373 -15.39054 -9.38194 -17.15216 -16.83245 -9.4044 -17.2743 -10.85152 -16.12691 -16.37608 -16.95311 -15.66724 -18.8772 -17.19494 -16.53568 -15.62062 -16.08315 -9.035169 -18.35178 -16.05381 -15.24209 -16.3152 -19.86281 -16.14577 -11.53979 -20.03139 -15.79156 -18.97156 -15.2024 -15.55318 -16.94276 -13.25168 -13.83774 -13.95615 -16.39097 -15.78281 -11.99277 -7.605853 -13.74642 -16.11603 -18.95016 -15.55747 -13.10882 -16.0825 -15.07232 -15.79594 -18.88714 -17.62956 -14.38717 -15.72376 -14.97782 -15.61193 -18.18128 -16.65086 -19.39635 -17.83264 -16.94934 -18.02247 -16.56574 -14.58484 -15.54829 -16.88283 -12.82989 -12.91461 -16.794 -16.8455 -14.49151
第二行开始数据没有顶格写。处理按照顶格处理。

论坛徽章:
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
发表于 2016-10-15 13:41 |显示全部楼层

  1. awk 'BEGIN{l1=split("1,2,4,6,9,10,15",a,",");l2=split("3,5,7,22,33,45,52,66,73,75,78",b,",")}{for(i=1;i<=NF;i++){for(j=1;j<=l1;j++){if(i==a[j]){num1+=$i}}for(k=1;k<=l2;k++)if(i==b[k]){num2+=$i}};print num1,num2}' file
复制代码

论坛徽章:
0
发表于 2016-10-15 16:39 |显示全部楼层
本帖最后由 Eva326 于 2016-10-15 16:40 编辑
  1. #!/usr/bin/perl -w
  2. use strict;

  3. open (IN, "<data.txt") or die $!;
  4. open (OUT, ">sum.txt") or die $!;

  5. my @array;
  6. my $num1;
  7. my $num2;
  8. while (<IN>){
  9.         chomp;
  10.         @array=split;
  11.         $num1 = $array[0]+$array[1]+$array[3]+$array[5]; #这里继续往后加上你要统计的列,[]里的数字为[列号-1]
  12.         $num2= $array[2]+$array[4]+$array[6]; #同上
  13.         print OUT "$num1\t$num2\n";
  14. }

  15. close IN;
  16. close OUT;
复制代码

论坛徽章:
1
15-16赛季CBA联赛之山东
日期:2019-02-18 23:04:06
发表于 2016-10-15 17:26 |显示全部楼层
回复 4# Eva326

为什么[]里的数字是列号减1呢?

论坛徽章:
1
15-16赛季CBA联赛之山东
日期:2019-02-18 23:04:06
发表于 2016-10-15 17:27 |显示全部楼层
回复 2# fcl21721

map函数里面要减1是为什么啊?

论坛徽章:
0
发表于 2016-10-15 21:25 |显示全部楼层
回复 5# 很宅的男

数组从0编号 $array[0]表示数组的第一个元素

论坛徽章:
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
发表于 2016-10-16 01:30 |显示全部楼层
别怕麻烦, 根据索引求和就好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP