有一种简单的方法用bash计算分位数吗?

时间:2009-08-25 21:44:50

标签: bash shell statistics quantile

假设我有一个来自Web服务器的日志文件,其中包含每个请求的响应时间:

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

使用bash脚本有一种简单的方法来查找最高十分位数(10 - quantile)吗?换句话说回答这个问题:如果我排除最慢的10%请求,那么最慢的请求有多慢?

2 个答案:

答案 0 :(得分:5)

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

在perl中完成整个事情确实会更优雅。如果要使用临时文件,可以使用wc + head / tail从排序的数字列表中选择分位数。

答案 1 :(得分:1)

我可能会通过请求字段对行进行数字排序,然后从最后获取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

希望这就是你要找的东西。