C'è un modo semplice per calcolare quantili con bash?
-
19-09-2019 - |
Domanda
Diciamo che ho un file di log da un server web con tempi di risposta per ogni domanda:
_1st_request 1334
_2nd_request 345
_3rd_request 244
_4th_request 648
......... etc
C'è un modo semplice con gli script bash per trovare il decile (10- quantile )? In altre parole, di rispondere alla domanda: come lenta è stata la richiesta più lento se escludo il più lento del 10% delle richieste
Soluzione
awk '{print $2}' | sort -rn | perl -e '$d=.1;@l=<>;print $l[int($d*$#l)]'
Sarà infatti più elegante per fare il tutto in perl. Se si desidera utilizzare un file temporaneo, è possibile utilizzare wc + testa / coda per selezionare il quantile dalla lista ordinata di numeri.
Altri suggerimenti
Io probabilmente sorta numericamente il campo richiesta di contare le linee e prendere la linea che è del 10% dalla fine.
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
Spero che sia quello che stavi cercando.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow