in reply to How to group by a column and calculate max/min on another
use strict; use List::Util qw(min max); my %hash=(); while(<DATA>) { my @fields=split /\s+/; my $i=0; push @{${$hash{$fields[0]}{$fields[3]}}->[$i++]},$_ for @fields[1,2,4] +; } foreach my $hkey1 (keys %hash) { foreach my $hkey2 (keys %{$hash{$hkey1}}) { print join "\t",$hkey1,$hkey2,min(@{${$hash{$hkey1}{$hkey2}}-> +[0]}),max(@{${$hash{$hkey1}{$hkey2}}->[1]}),max(@{${$hash{$hkey1}{$hk +ey2}}->[2]}),"\n";; } } __END__ chrX 2680092 2744539 XG 1 chrX 2680090 2744529 XG 2 chrX 2680080 2744519 XG 3 chrX 2680070 2744509 XG 4 chrX 2680070 2744509 DT 1 chrX 2680090 2744519 DT 2
|
|---|