sub by_val { return -($seen{$a} <=> $seen{$b}); } for (split("\n", $content)) { $good = ( split(/logo_/, $_) ) [ 1 ]; $good1 = ( split (/_20x/, $good) ) [ 0 ] if $good; $seen{$good1}++ if $good1; } print "$_ $seen{$_}" for sort by_val keys %seen;