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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top