#!/usr/bin/perl -s

# sortc - sort and count unique input lines
# Steve Kinzler, steve@kinzler.com, Mar 96
# https://kinzler.com/me/home.html#unix

$usage = "usage: $0 [ -p ] [ -c ] [ -r ] [ file ... ]
	-p	take all input as being pre-counted
	-c	sort the output by increasing count instead of by line
	-r	reverse the order of output lines\n";
die $usage if $h;

if ($p) {
	while (<>) {
		die "$0: input not pre-counted in $ARGV line $.\n"
			unless s/^(\d+) //;
		$lines{$_} += $1;
	}
} else {
	while (<>) {
		$lines{$_}++;
	}
}

@lines = ($c && $r) ? reverse sort bylinecount keys %lines :
	 ($c)	    ?	      sort bylinecount keys %lines :
	 ($r)	    ? reverse sort	       keys %lines :
			      sort	       keys %lines;

while (@lines) {
	$_ = shift @lines;
	print $lines{$_}, ' ', $_;
}

sub bylinecount {
	$lines{$a} <=> $lines{$b} || $a cmp $b;
}
