Pergunta

Vamos dizer que eu tenho um arquivo de log de um servidor web com tempos de resposta por solicitação:

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

Existe uma maneira fácil com scripts bash para encontrar o decil superior (10 quantil )? Em outras palavras para responder à pergunta: Como lento foi o pedido mais lento se eu excluir o mais lento de 10% dos pedidos

Foi útil?

Solução

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

De fato, seria mais elegante de fazer a coisa toda em perl. Se você quiser usar um arquivo temporário, você pode usar wc + cabeça / cauda para selecionar o quantil da lista ordenada de números.

Outras dicas

Eu provavelmente espécie numericamente pelo campo pedido contar as linhas e pegue a linha que é de 10% a partir do 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

A esperança é o que você estava procurando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top