Pregunta

Digamos que tengo un archivo de registro desde un servidor web con tiempos de respuesta al pedido:

_1st_request 1334
_2nd_request 345
_3rd_request 244
_4th_request 648
......... etc

¿Hay una manera fácil con secuencias de comandos bash para encontrar el decil superior (10 cuantil )? En otras palabras, para responder a la pregunta: ¿Cómo lenta fue la petición más lento si excluyo el 10% más lento de solicitudes

¿Fue útil?

Solución

awk '{print $2}' | sort -rn | perl -e '$d=.1;@l=<>;print $l[int($d*$#l)]'

De hecho, sería más elegante de hacer todo esto en Perl. Si desea utilizar un archivo temporal, puede utilizar wc + cabeza / cola para seleccionar el cuantil de la lista ordenada de números.

Otros consejos

Yo probablemente especie numéricamente por el campo de petición contar las líneas y apoderarse de la línea que es 10% a partir del final.

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

La esperanza de que es lo que estaba buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top