You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash按HTTP状态码统计响应时间:求最值、均值及频次

解决方案:用awk快速计算HTTP状态码的响应时间统计值

这里有个简洁的awk脚本,刚好能满足你的需求——不管是处理已保存的测试结果文件,还是直接对接curl的实时输出,它都能按唯一HTTP状态码分组,自动计算响应时间的最小值、最大值、平均值和出现次数。

1. 处理已保存的数据文件

假设你的测试结果存在load_test_results.txt里,运行以下命令即可:

awk '{
    # 遍历所有字段,每两个一组(状态码 + 响应时间)
    for (i=1; i<=NF; i+=2) {
        code = $i; time = $(i+1)
        sum[code] += time       # 累加该状态码的响应时间总和
        count[code]++           # 统计该状态码的出现次数
        # 更新最小值:首次记录或当前时间更小时替换
        if (!min[code] || time < min[code]) min[code] = time
        # 更新最大值:首次记录或当前时间更大时替换
        if (!max[code] || time > max[code]) max[code] = time
    }
}
END {
    # 打印表头
    print "http min max mean count"
    # 按状态码数字升序输出(可选,去掉则按awk默认顺序)
    PROCINFO["sorted_in"] = "@ind_num_asc"
    # 遍历每个状态码,计算平均值并格式化输出
    for (c in sum) {
        mean = sum[c] / count[c]
        printf "%d %.3f %.3f %.3f %d\n", c, min[c], max[c], mean, count[c]
    }
}' load_test_results.txt

2. 直接对接curl命令(无需中间文件)

如果不想先把结果存到文件,直接让curl的输出传给统计脚本,用管道连接就行:

curl -s -o /dev/null -w "%{http_code} %{time_total} " $SERVICE_URL | awk '{
    for (i=1; i<=NF; i+=2) {
        code = $i; time = $(i+1)
        sum[code] += time
        count[code]++
        if (!min[code] || time < min[code]) min[code] = time
        if (!max[code] || time > max[code]) max[code] = time
    }
}
END {
    print "http min max mean count"
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for (c in sum) {
        mean = sum[c] / count[c]
        printf "%d %.3f %.3f %.3f %d\n", c, min[c], max[c], mean, count[c]
    }
}'

测试你的示例数据

用你提供的示例内容:200 2.691 200 2.735 404 1.997 404 2.838 200 1.394 200 1.833,运行脚本后会输出:

http min max mean count
200 1.394 2.735 2.163 4
404 1.997 2.838 2.418 2

完全匹配你期望的格式。

内容的提问来源于stack exchange,提问作者AngryPanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:53:22