%grams = ohash(); setMissPolicy(%grams, { return @(); }); $handle = openf(@ARGV[0]); $banner = readln($handle); readln($handle); # consume the ngram_count value while $text (readln($handle)) { ($gram, $count) = split(' ', $text); if (strlen($gram) <= 2 || $count > 20000) { push(%grams[strlen($gram)], @($gram, $count)); } } closef($handle); sub sortTuple { return $2[1] <=> $1[1]; } println($banner); printAll(map({ return join(" ", $1); }, sort(&sortTuple, %grams[1]))); printAll(map({ return join(" ", $1); }, sort(&sortTuple, %grams[2]))); printAll(map({ return join(" ", $1); }, sort(&sortTuple, %grams[3]))); printAll(map({ return join(" ", $1); }, sort(&sortTuple, %grams[4])));