in reply to
compare values while value on other column remains the same
Something like this?
use strict;
use warnings;
use List::Util qw(sum);
my %table;
while (defined(my $line = <DATA>)) {
my @values = split(/\s+/, $line);
push @{$table{$values[3]}}, \@values;
}
foreach my $key (sort keys %table) {
my $avg_diff = sum(map { ($_->[5] / 1000) - ($_->[4] / 1000) } @{$
+table{$key}}) / @{$table{$key}};
foreach my $array_ref (@{$table{$key}}) {
if ($avg_diff >= 0.02) {
print join("\t", @{$array_ref}), "\n";
}
}
}
__DATA__
chr1 15865 15915 cg13869341 908 913
chr1 18827 18877 cg14008030 688 776
chr1 29407 29457 cg12045430 43 70
chr1 29407 29457 cg12045430 43 88
chr1 29407 29457 cg12045430 43 16
chr1 29425 29475 cg20826792 57 70
chr1 29425 29475 cg20826792 57 88
chr1 29425 29475 cg20826792 57 16
chr1 29435 29485 cg00381604 33 70
chr1 29435 29485 cg00381604 33 88
chr1 29435 29485 cg00381604 33 16
chr1 68849 68899 cg20253340 560 593
chr1 69591 69641 cg21870274 791 809
chr1 91550 91600 cg03130891 55 84