Como calcular% de consultas bem-sucedidas

1

Estou tentando calcular qual é o% de consultas bem-sucedidas no log do apache. Eu tenho dois comandos:

cat access_log|cut -d' ' -f10|grep "2.."|wc -l

e

cat access_log|cut -d' ' -f10|wc -l

Eles me retornam o número de consultas bem-sucedidas e o número total de consultas. Eu quero calcular o que é o% de solicitações bem-sucedidas usando o bash e, se for possível, deve ser um script de linha. Supõe-se a saída apenas o número de% como - 50 ou 12 sem qualquer informação adicional.

Eu tentei usar o bc com ele, mas falhei por falta de conhecimento. Alguém pode me ajudar?

    
por Valentyn 07.12.2015 / 14:19

4 respostas

1

Tente isto:

echo $(( 100 * $( cut -d' ' -f10 access_log|grep "2.."|wc -l) / $(cut -d' ' -f10 access_log|wc -l) ))

Bash só pode manipular inteiros.

    
por 07.12.2015 / 14:24
0

Usando awk e somente percorre o arquivo de log uma vez:

awk '{if ((199 < $9) && ($9 < 300)) {SUMOK++} else {OTHER++}} END { printf "%d\n", ((SUMOK/NR)*100)}' access_log
    
por 07.12.2015 / 14:40
0

Você pode tentar isso. Substitua $ 9 pelo número de campo correto do código de status.

awk '{if ($9 == 200)  no_of_200+=1 } END{ perc=(no_of_200/NR)*100; print perc}' access.log
    
por 07.12.2015 / 14:42
0
sed -ne'\|^\([^ ]*  *\)\{9\}2..|=;$=;$s|.*|2ksmzlm/p|'|dc

... funciona ...

por exemplo:

printf %s\n 1 2 3 4 5 6 7 8 9 10 |
sed -ne'/1/=;$=;$s|.*|2ksmzlm/p|p'|dc
.20

... para mostrar que sed correspondia ao padrão 1 contra 20% de suas linhas de entrada.

    
por 07.12.2015 / 15:12

Tags