my @col1; my @col2; my $t = 0; foreach (sort {$hash{$b} <=> $hash{$a} || $b cmp $a} keys %hash) { if ($t ^= 1) { push(@col1, $_); } else { push(@col2, $_); } } printf "%s\t%s\n", pop(@col1), pop(@col2) while @col2; printf "%s\n", pop(@col1) while @col1;