Gibt es eine einfache Möglichkeit, Quantile mit bash zu berechnen?
-
19-09-2019 - |
Frage
Hier kann sagen, dass ich eine Log-Datei von einem Webserver mit Antwortzeiten pro Anfrage habe:
_1st_request 1334
_2nd_request 345
_3rd_request 244
_4th_request 648
......... etc
Gibt es eine einfache Möglichkeit, mit bash scripting die Top-Dezil zu finden (10- Quantils )? Mit anderen Worten, die Frage zu beantworten: Wie langsam war die langsamste Anfrage, wenn ich das langsamsten 10% der Anfragen ausschließen
Lösung
awk '{print $2}' | sort -rn | perl -e '$d=.1;@l=<>;print $l[int($d*$#l)]'
Es wäre in der Tat mehr elegant sein, das Ganze in Perl zu tun. Wenn Sie eine temporäre Datei verwenden möchten, können Sie mit WC + Kopf / Schwanz das Quantil aus der sortierten Liste von Nummern wählen.
Andere Tipps
Ich würde wahrscheinlich Art numerisch durch das Anforderungsfeld der Zeilen zähle und die Linie greifen, die 10% vom Ende ist.
FILE=responseTimes.log
TMPFILE=tmpfile
sort -k 2 -n $FILE > $TMPFILE
LINECOUNT=`wc -l $TMPFILE | sed -e 's/^ *//' -e 's/ .*$//'`
TARGETLINE=echo "$LINECOUNT * 9 / 10" | bc
sed -n "$TARGETLINE{p;q;}" $TMPFILE
Ich hoffe, das ist, was Sie suchen.