2009-08-25 5 views
3

Disons que j'ai un fichier journal à partir d'un serveur Web avec des temps de réponse par demande:Existe-t-il un moyen facile de calculer les quantiles avec bash?

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

est-il un moyen facile avec les scripts bash pour trouver le décile supérieur (10 quantile)? En d'autres termes, pour répondre à la question: Quelle est la lenteur de la requête la plus lente si j'exclue le plus lent des 10% de demandes?

+0

des raisons de ne pas utiliser perl pour cela? –

+0

On dirait que vous essayez d'utiliser un marteau pour visser. – Juliano

+0

Merci pour les réponses. Les deux fonctionnent bien, mais le Perl est plus concis. – idrosid

Répondre

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

Il serait en effet plus élégant de tout faire en perl. Si vous souhaitez utiliser un fichier temporaire, vous pouvez utiliser wc + head/tail pour sélectionner le quantile dans la liste des numéros triés.

2

Je trierais probablement numériquement par le champ de requête compter les lignes et saisir la ligne qui est 10% de la fin.

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 

Espérons que c'est ce que vous cherchiez.

Questions connexes