| #!/usr/bin/env bash | |
|  | |
| # Optionally specify number of lines to show, defaulting to 10: | |
| TOSHOW=10 | |
| CASEOPT="" | |
| 
 | |
| while getopts ":in:" opt; do | |
|   case $opt in | |
|     i) | |
|       CASEOPT="-i" | |
|       ;; | |
|     n) | |
|       TOSHOW=$OPTARG | |
|       ;; | |
|     \?) | |
|       echo "Invalid option: -$OPTARG" >&2 | |
|       exit 1 | |
|       ;; | |
|     :) | |
|       echo "Option -$OPTARG requires an argument." >&2 | |
|       exit 1 | |
|       ;; | |
|   esac | |
| done | |
| 
 | |
| # sort and then uniqify STDIN, | |
| # sort numerically on the first field, | |
| # chop off everything but $TOSHOW lines of input | |
| 
 | |
| sort < /dev/stdin | uniq -c $CASEOPT | sort -k1 -nr | head -$TOSHOW
 |