use List::Util qw( sum );
my %data;
while (<>) {
chomp;
my ($k, $v) = split /\t/;
push @{ $data{$k} }, $v;
}
local $, = "\t";
local $\ = "\n";
for my $k (keys %data) {
my $data = $data{$k};
print $k, 0+@$data, sum(@$data)/@$data;
}
####
my %data;
while (<>) {
chomp;
my ($k, $v) = split /\t/;
$data{$k}[0]++
$data{$k}[1]+= $v;
}
local $, = "\t";
local $\ = "\n";
for my $k (keys %data) {
my $data = $data{$k};
print $k, $data->[0], $data->[1]/$data->[0];
}
####
my $last;
my $sum;
my $count;
local $, = "\t";
local $\ = "\n";
while (<>) {
chomp;
my ($k, $v) = split /\t/;
if (defined($last) && $k ne $last) {
print $last, $count, $sum/$count;
($last, $count, $sum) = ($k, 0, 0);
}
$count++
$sum += $v;
}
if (defined($last)) {
print $last, $sum/$count;
}
####
perl -lane'
$d{$F[0]}[0]++
$d{$F[0]}[1]+= $F[1];
}{
$, = "\t";
print $_, $d{$_}[0], $d{$_}[1]/$d{$_}[0] for keys %d;
'