my $elem = 1; my $k = 3; my %out; while ( ) { next unless /\b$elem\b/; $out{$_}++ for split; } delete $out{$elem}; print "$_ ($out{$_} times)\n" for (sort { $out{$b} <=> $out{$a} } keys %out)[ 0 .. ( $k - 1 ) ];