#!/usr/bin/perl -s # sortc - sort and count unique input lines # Steve Kinzler, kinzler@cs.indiana.edu, Mar 96 # http://www.cs.indiana.edu/~kinzler/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; }