Намедни понадобилось посчитать процентиль из некоего текстового файла. По сути, необходимо сделать следующее - расположить все встречаемые значения по возрастанию и выбрать элемент, который будет соответствовать нужному %. К примеру - есть 100 отсортированных значений, процентиль 95% в этом случае будет 95-й элемент. Соответственно, скрипт примерно такой:
{ array[NR] = $1 } END { print "Percentile 95%: " array[int(NR*.95-0.5)] }Такой сценарий часто встречается в инете. Однако есть сложность - данные в $1 должны быть заранее отсортированы. А если надо посчитать процентиль для нескольких столбцов, то приведенный способ совсем не подойдет.
Тут на выручку приходит встроенная в awk функция asort():
{ array1[NR] = $2; array2[NR] = $4 } END { n=asort(array1); n=asort(array2); print "Percentile 95%: " array1[int(NR*.95-0.5)], array2[int(NR*.95-0.5)] }Здесь n - размер массива. Полезно, в случае, когда не все строки участвуют в подсчете, т.е. NR > n.
Комментариев нет:
Отправить комментарий