Perl-使用唯一键[group]获取项的总和

Perl-使用唯一键[group]获取项的总和,perl,grouping,Perl,Grouping,比如说 由此: UserA |单身|少女| 200 | 500 UserA |单身|孩子气| 200 | 200 UserA | Double | Girly | 100 | 200 UserA |多个|孩子气| 200 | 400 UserA | Double | Girly | 250 | 150 UserA |单身|孩子气| 150 | 150 为此: UserA |单身|少女| 200 | 500 UserA |单身|孩子气| 350 | 350 UserA | Double | Gir

比如说

由此:

UserA |单身|少女| 200 | 500 UserA |单身|孩子气| 200 | 200 UserA | Double | Girly | 100 | 200 UserA |多个|孩子气| 200 | 400 UserA | Double | Girly | 250 | 150 UserA |单身|孩子气| 150 | 150

为此:

UserA |单身|少女| 200 | 500 UserA |单身|孩子气| 350 | 350 UserA | Double | Girly | 350 | 350 UserA |多个|孩子气| 200 | 400

我应该如何对其进行编码,以便通过相同的键获得行的和。 你从我的例子中得到了基本的想法


谢谢

使用前几个字段的串联键创建2个散列来存储总和$总数{'UserA | Single | Boyish'}+=$value{u 1;下一次当你发布一个问题时,如果你不想被否决,请尝试做一些事情,并发布你所做的代码。另外,如果你的问题符合你的问题要求,请接受它的答案。我只是忘了更新这个线程。我已经解决了我的问题,我只是做了一个唯一的键,将用户与他们的状态分组,这样我就可以将以前的值附加到新值中。
use strict;
use warnings;

my %hash;
while(my $line = <DATA>)
{
    chomp $line;
    if ($line =~ /(.*\|.*\|.*)\|(\d*)\|(\d*)/)
    {
        # you want to group them by the first 3 attributes, therefore:
        # 1 will hold UserA|Single|Girly
        # 2 will hold the first value
        # 3 will hold the second value
        $hash{$1}{'first_value'} += $2;
        $hash{$1}{'second_value'} += $3;
    }
}

use Data::Dumper;
print Dumper %hash;


__DATA__
UserA|Single|Girly|200|500
UserA|Single|Boyish|200|200
UserA|Double|Girly|100|200
UserA|Multiple|Boyish|200|400
UserA|Double|Girly|250|150
UserA|Single|Boyish|150|150
$VAR1 = 'UserA|Multiple|Boyish';
$VAR2 = {
          'first' => '200',
          'second' => '400'
        };
$VAR3 = 'UserA|Double|Girly';
$VAR4 = {
          'first' => '350',
          'second' => '350'
        };
$VAR5 = 'UserA|Single|Boyish';
$VAR6 = {
          'first' => '350',
          'second' => '350'
        };
$VAR7 = 'UserA|Single|Girly';
$VAR8 = {
          'first' => '200',
          'second' => '500'
        };