use strict; use warnings; use Acme::Tools; use Text::Table; my %data; my %freq; while () { my ($organism, @vals) = (split)[2..5]; $freq{ $organism }++; my $col = 3; for my $val (@vals) { push @{ $data{$organism}{$col} }, $val; $col++; } } my @headers = qw/ Organism Frequency Median_Eval Median_Contig_Length Median_Mapped_Length /; my $tb = Text::Table->new( map {title => $_}, @headers ); for my $test (sort {$freq{ $b } <=> $freq{ $a }} keys %freq) { my @row = ($test, $freq{ $test }); for my $col (sort keys %{ $data{$test} }) { push @row, median(@{ $data{$test}{$col} }); } $tb->load( [@row] ); } print $tb; __DATA__ contig1 AC344 organism1 1e-1 122 45 contig1 AC344 organism1 1e-2 122 45 contig1 AC346 organism2 1e-102 122 46 contig1 Ac346 organism2 1e-100 122 46 contig1 Ac346 organism2 1e-114 122 46 contig1 Ac346 organism2 1e-111 122 46 contig2 NC333 organism3 1e-2 155 90 contig3 NC444 organism4 1 188 50 contig3 NC444 organism4 12 188 50 #### C:\perlp>812293.pl Organism Frequency Median_Eval Median_Contig_Length Median_Mapped_Length organism2 4 5.000000005e-103 122 46 organism1 2 0.055 122 45 organism4 2 6.5 188 50 organism3 1 1e-2 155 90