- 论坛徽章:
- 0
|
本帖最后由 黑色阳光_cu 于 2010-03-18 22:58 编辑
- #!/bin/env perl
- use strict;
- use warnings;
- my @lines;
- my @stack;
- my $keyword;
- my $sp = " " x 8;
- foreach $_ (sort { &filter($a, $b) } <DATA>)
- {
- my @fields = split(/\s+/, $_);
- $keyword = $fields[0] if (not defined $keyword);
- if ($keyword ne $fields[0])
- {
- push(@lines, &average());
- @stack = (\@fields);
- $keyword = $fields[0];
- }
- else
- {
- push(@stack, \@fields);
- }
- }
- push(@lines, &average());
- die join("\n", @lines), "\n";
- sub filter
- {
- return (split(/\s+/, $_[0]))[0] cmp (split(/\s+/, $_[1]))[0];
- }
- sub average()
- {
- my $result;
- for (my $n = 1; $n <= $#stack; $n++)
- {
- for (my $nn = 1; $nn <= $#{$stack[$n]}; $nn++)
- {
- $stack[0]->[$nn] += $stack[$n]->[$nn];
- }
- }
- for (my $nn = 1; $nn <= $#{$stack[0]}; $nn++)
- {
- $stack[0]->[$nn] /= $#stack + 1;
- }
- $result = join($sp, @{$stack[0]});
- @stack = ();
- return $result;
- }
- __DATA__
- CA6 1 2 3 4 5
- CA7 2 5 3 2 1
- CA8 2 8 6 3 2
- CA8 3 4 4 1 5
- CA9 5 8 7 6 1
复制代码 |
|