use strict; use warnings; my $ncol; while (){ my ($id,@acgt)=split; my (%count,@reports); # -- count ACGT $count{$_}++ for (@acgt) ; # -- print in descending order while( my ($marker,$number) = each %count ) { push @reports, "$number $marker"; } print "Column :",$ncol++,"\n"; no warnings "numeric"; print join ("\t",sort {$b <=>$a} @reports),"\n"; } __DATA__ 3851 A A G G T T A A C C 3854 A A G G T T A A C C 3871 A A G G T T A A G G #### Column :0 4 A 2 T 2 C 2 G Column :1 4 A 2 T 2 C 2 G Column :2 4 A 4 G 2 T