#!/usr/bin/perl use Getopt::Long; GetOptions("sort" => \$sort, "graph" => \$hashes, "help" => sub { print("freq 0.1.1 (2003-10-14)\n"); print("Usage: freq [-s] [-g] [file]\n"); print("Print the frequency of occurances of unique lines in file/stdin\n\n"); print("\t-s, --sort\tSort the output based on frequency\n"); print("\t-g, --graph\tPrint a histogram of the frequencies\n"); print("\t-h, --help\tThis help information\n\n"); print("Report bugs to \n"); exit (-1); }); my %lines; my $maxlen = 0; my $maxnumlen = 2; while (<>) { chomp; $maxnumlen = length($lines{$_}) if (length(++$lines{$_}) > $maxnumlen); $maxlen = length if (length > $maxlen); } if ($sort) { foreach $line (sort { $lines{$a} <=> $lines{$b} } keys %lines) { if ($hashes) { printf "%" . $maxlen . "s %s %d\n", $line, "#" x $lines{$line}, $lines{$line}; } else { printf "%" . $maxnumlen . "d %s\n", $lines{$line}, $line; } } } else { foreach $line (keys %lines) { if ($hashes) { printf "%" . $maxlen . "s %s %d\n", $line, "#" x $lines{$line}, $lines{$line}; } else { printf "%" . $maxnumlen . "d %s\n", $lines{$line}, $line; } } }