open INFILE, "<$infile" or die $!; chomp(my @lines = ); close INFILE or die $!; my ($chr, $prev_loc, $prev_pval, $prev_fst) = (split /\t/, $lines[0])[1,2,5,6]; my $prev_join = "$chr-$prev_loc"; my $i=1; my %pval; my %fst; foreach (@lines[1 .. $#lines]){ my ($name, $chr, $location, $gen, $dom, $pval, $fst) = split /\t/; my $join = "$chr-$location"; if ($location == $prev_loc){ $pval = $pval + $prev_pval; $fst = $fst + $prev_fst; $i++; } else { $pval{$prev_join} = $prev_pval / $i; $fst{$prev_join} = $prev_fst / $i; $i = 1; } $prev_loc = $location; $prev_pval = $pval; $prev_fst = $fst; $prev_join = $join; } $pval{$prev_join} = $prev_pval/$i; $fst{$prev_join} = $prev_fst/$i; foreach (@lines){ my ($name, $chr, $location, $gen, $dom, $pval, $fst) = split /\t+/; my $join = "$chr-$location"; my $new_pval = $pval{$join}; my $new_fst = $fst{$join}; print $name."\t".$chr."\t".$location."\t".$gen."\t".$dom."\t".$new_pval."\t".$new_fst."\n"; }