Есть ли простой способ рассчитать квантили с помощью bash? - PullRequest
2 голосов
/ 26 августа 2009

Допустим, у меня есть файл журнала с веб-сервера с временем ответа на запрос:

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

Есть ли простой способ с помощью сценариев bash найти верхний дециль (10- квантиль )? Другими словами, чтобы ответить на вопрос: насколько медленным был самый медленный запрос, если я исключил самые медленные 10% запросов?

Ответы [ 2 ]

5 голосов
/ 26 августа 2009
awk '{print $2}' | sort -rn | perl -e '$d=.1;@l=<>;print $l[int($d*$#l)]'

Действительно, было бы более элегантно делать все это в perl. Если вы хотите использовать временный файл, вы можете использовать wc + head / tail, чтобы выбрать квантиль из отсортированного списка чисел.

1 голос
/ 26 августа 2009

Я бы, вероятно, отсортировал численно по полю запроса, посчитал бы строки и взял бы строку, которая на 10% от конца.

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

Надеюсь, это то, что вы искали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...