簡體   English   中英

如何使用Perl輸出唯一,計數和總和

[英]How can I output unique, count and sum using perl

我是Perl的新手。 我需要找到以下數據的唯一,計數和總和。 我請求你的幫助。

08/2009   I-111   300
08/2009   I-112   400
08/2009   I-113   500
10/2009   I-200   1000
10/2009   I-300   500
11/2009   I-300   100
11/2009   I-100   400

所以我需要找到這樣的

08/2009 3 1200
10/2009 2 1500

List::MoreUtils uniq返回List::MoreUtils的唯一元素:

use List::MoreUtils 'uniq';
my @x = uniq 1, 1, 2, 2, 3, 5, 3, 4;    # (1,2,3,5,4)

標量上下文中的列表表達式返回元素數。

my @array = (5,6,7,8);
my $a_count = @array;       # 4

my %hash = ('x' => 1, 'y' => 2);
my $h_count = keys %hash;   # 2

List::Util sum添加List::Util的元素。

use List::Util 'sum';
my @array = (1,2,3,4,5);
print sum @array;   # 15

不確定您到底想要什么,但是可以嗎?

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dump qw(dump);

my %h;
while(<DATA>) {
    chomp;
    my @el = split;
    $h{$el[0]}{count}++;
    $h{$el[0]}{sum} += $el[2];
}
dump%h;

__DATA__
08/2009   I-111   300
08/2009   I-112   400
08/2009   I-113   500
10/2009   I-200   1000
10/2009   I-300   500
11/2009   I-300   100
11/2009   I-100   400

輸出:

(
  "08/2009",
  { count => 3, sum => 1200 },
  "11/2009",
  { count => 2, sum => 500 },
  "10/2009",
  { count => 2, sum => 1500 },
)

回復:M42的回答,試試:

use Data::Dumper;
print Dumper \%h;

或者你可以寫:

while (my ($key, $values) = each %h) {
    print "$key $values->{count} $values->{sum}\n";
}

通常情況下,我不會為自由類型的東西編寫我的程序 ,但是因為M42已經完成了大部分工作,所以這里沒有Data::Dump

#!/usr/bin/perl
use strict;
use warnings;

my %h;
while(<DATA>) {
    chomp;
    my @el = split;
    $h{$el[0]}->{count}++;
    $h{$el[0]}->{sum} += $el[2];
}

foreach my $element (sort keys %h) {
    printf "%-10.10s  %-6.6s  %4d\n", $element, 
    $h{$element}->{count}, $h{$element}->{sum};
}
__DATA__
08/2009   I-111   300
08/2009   I-112   400
08/2009   I-113   500
10/2009   I-200   1000
10/2009   I-300   500
11/2009   I-300   100
11/2009   I-100   400   

現在學習一些Perl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM