use strict; use warnings; my %msgs; while () { s/^\s+//; chomp; $msgs{$_}++; } # Sort by number of occurrences and only show top 8: my $i = 0; for my $m (sort {$msgs{$b} <=> $msgs{$a}} keys %msgs) { print "$msgs{$m} $m\n"; $i++; last if $i == 8; } __DATA__ Mar 9 08:15:05 gen-vcs11 kernel: kjslah: Unknown symbol unlock_page Mar 9 08:15:05 gen-vcs11 kernel: kjslah: Unknown symbol generic_file_read Mar 9 08:15:05 gen-vcs11 kernel: kjslah: Unknown symbol generic_file_write Mar 9 08:15:05 gen-vcs11 kernel: kjslah: Unknown symbol generic_file_mmap Mar 9 08:15:05 gen-vcs11 kernel: kjslah: Unknown symbol generic_file_sendfile Mar 9 08:15:05 gen-vcs11 kernel: kjslah: disagrees about version of symbol zone_table Mar 9 08:15:05 gen-vcs11 kernel: kjslah: Unknown symbol zone_table Mar 9 08:15:05 gen-vcs11 kernel: kjslahdisagrees about version of symbol unlock_page Mar 9 08:15:05 gen-vcs11 kernel: kjslah: Unknown symbol unlock_page Mar 9 08:15:05 gen-vcs11 kernel: kjslah: Unknown symbol filemap_fdatawrite Mar 9 08:15:05 gen-vcs11 kernel: kjslah: Unknown symbol find_or_create_page