#!/bin/bash
#
# Compute percentiles over last N samples
# from stdin
#

cleanup() {
	rm $TMPFILE
}
log() {
	printf "`date +%c` - $*\n" >&2
}
error() {
    printf "ERROR: $*\n" >&2
    exit 1
}
usage() {
	printf "Usage: $(basename $0) [-N <tail_num_lines>]\n" >&2
	exit -1
}

N=

while getopts "N:h" OPT
do
	case $OPT in
		N)	N="$OPTARG"
            typeset -i N
			;;
		f)	FIELD="$OPTARG"
			;;
		h)	usage
			;;
	esac
done
shift $((OPTIND-1))


TMPFILE=`mktemp /tmp/tmp_percentiles.XXXXXX`

if [ "$?" -ne 0 ];
then
    error "Could not create temporary file, aborting."
fi


trap "cleanup; exit" SIGTERM EXIT

if [ -n "$N" ];
then
    tail -n $N $* | \
        LC_NUMERIC=en_US.utf-8 sort -k1,1g > $TMPFILE
else
    cat $* | \
        LC_NUMERIC=en_US.utf-8 sort -k1,1g > $TMPFILE

fi

L=`cat $TMPFILE | wc -l`
typeset -i L

log "Number of samples used: `cat $TMPFILE | wc -l`"

for i in {10,20,30,40,50,60,70,80,90};
do
	l=`echo "scale=1; $i / 100 * $L" | bc | awk -F '.' '{ print $1; exit; }'`
	typeset -i l
	if [ -z "$l" ];
	then
		l=1
	fi
	p=`cat $TMPFILE | head -n $l | tail -n1`
	log "${i}th Percentile (${l}th Sample): $p"
done
