Есть ли простой способ вычислить квантили с помощью bash?

StackOverflow https://stackoverflow.com/questions/1331204

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Я бы, вероятно, произвел числовую сортировку по полю запроса, подсчитал строки и взял строку, которая находится в 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top