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

发布于 2024-08-03 11:22:59 字数 311 浏览 13 评论 0原文

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

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

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

Lets say I have a log file from a web server with response times per request:

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

Is there an easy way with bash scripting to find the top decile (10-quantile)? In other words to answer the question: How slow was the slowest request if I exclude the slowest 10% of requests?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Oo萌小芽oO 2024-08-10 11:22:59
awk '{print $2}' | sort -rn | perl -e '$d=.1;@l=<>;print $l[int($d*$#l)]'

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

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

It would indeed be more elegant to do the whole thing in perl. If you want to use a temporary file, you can use wc + head/tail to select the quantile from the sorted list of numbers.

初熏 2024-08-10 11:22:59

我可能会按请求字段对行数进行数字排序,并获取距末尾 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

希望这就是您正在寻找的。

I would probably sort numerically by the request field count the lines and grab the line that's 10% from the end.

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

Hope that's what you were looking for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文