Skip to content

Instantly share code, notes, and snippets.

@roblogic
Forked from stig/percentiles.sh
Last active December 4, 2019 11:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save roblogic/139891f110d39bbd2500a699e3d8b060 to your computer and use it in GitHub Desktop.
Save roblogic/139891f110d39bbd2500a699e3d8b060 to your computer and use it in GitHub Desktop.
Print percentiles for list of data points
#!/bin/sh
# Exit immediately on error
set -e
# set -x
# Create temporary file
FILE=$(mktemp /tmp/$(basename $0).XXXXX) || exit 1
# Sort entries
sort -n $* > $FILE
# Count number of data points
N=$(wc -l $FILE | awk '{print $1}')
echo "Percentiles at 50, 90, 95 and 99 % for $N data points:"
# Calculate line numbers for each percentile we're interested in
P50=$(dc -e "$N 2 / p")
P90=$(dc -e "$N 9 * 10 / p")
P95=$(dc -e "$N 95 * 100 / p")
P99=$(dc -e "$N 99 * 100 / p")
awk "FNR==$P50 || FNR==$P90 || FNR==$P95 || FNR==$P99" $FILE
echo "Std. dev:"
awk '{x+=$0;y+=$0^2}END{print sqrt(y/NR-(x/NR)^2)}' $FILE
@roblogic
Copy link
Author

roblogic commented Mar 29, 2017

Example

Analysing results from Jmeter's "Simple Data Writer"...

$ awk -F, '{print $2}' FPE1_50K_60tpm.csv | percentiles.sh
Percentiles at 50, 90, 95 and 99 % for 57604 data points:
19
21
23
73

@roblogic
Copy link
Author

roblogic commented Jun 7, 2017

Superseded by new script jstats2

@roblogic
Copy link
Author

roblogic commented Oct 26, 2017

Super-superseded by istats

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment