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

如何基于用户自定义分箱计算数值出现次数

自定义分箱统计数值出现次数的实现方案

直接用awk完成过滤、数值清洗、分箱计数、格式化输出全流程,替代原有的多管道命令,逻辑更紧凑准确:

完整命令

grep -i 'VIO' "$FILE" | awk '
BEGIN {
    # 初始化所有分箱的计数为0
    bin_counts["-1.0"] = 0
    bin_counts["-1.0 to -2.0"] = 0
    bin_counts["-2.1 to -3.0"] = 0
    bin_counts["-3.1 to -4.0"] = 0
    bin_counts["-4.0"] = 0
}
# 处理每行数据:提取第5列,去掉末尾的xx后缀转成数值
$5 ~ /-?[0-9]+\.[0-9]+xx/ {
    val = substr($5, 1, length($5)-2)
    # 匹配分箱规则,更新计数
    if (val > -1.0) {
        bin_counts["-1.0"]++
    } else if (val >= -2.0 && val <= -1.0) {
        bin_counts["-1.0 to -2.0"]++
    } else if (val >= -3.0 && val <= -2.1) {
        bin_counts["-2.1 to -3.0"]++
    } else if (val >= -4.0 && val <= -3.1) {
        bin_counts["-3.1 to -4.0"]++
    } else if (val < -4.0) {
        bin_counts["-4.0"]++
    }
}
# 处理完所有行后,按指定格式输出统计结果
END {
    printf "%-15s %d\n", "-1.0", bin_counts["-1.0"]
    printf "%-15s %d\n", "-1.0 to -2.0", bin_counts["-1.0 to -2.0"]
    printf "%-15s %d\n", "-2.1 to -3.0", bin_counts["-2.1 to -3.0"]
    printf "%-15s %d\n", "-3.1 to -4.0", bin_counts["-3.1 to -4.0"]
    printf "%-15s %d\n", "-4.0", bin_counts["-4.0"]
}'

关键细节说明

  1. 数值清洗:用substr($5, 1, length($5)-2)去掉原始数值末尾的xx后缀,将字符串转为可比较的浮点数。
  2. 分箱逻辑匹配:
    • -1.0:匹配大于-1.0的数值(对应示例中的-0.8xx)
    • -1.0 to -2.0:匹配[-2.0, -1.0]区间的数值(对应-1.3xx、-1.2xx、-1.4xx,共3个)
    • -2.1 to -3.0:匹配[-3.0, -2.1]区间的数值(对应-2.2xx)
    • -3.1 to -4.0:匹配[-4.0, -3.1]区间的数值(对应-3.4xx)
    • -4.0:匹配小于-4.0的数值(对应-4.2xx、-5.3xx,共2个)
  3. 格式化输出:用%-15s保证分箱描述左对齐且宽度统一,和要求的输出格式完全一致。

测试验证

用提供的测试数值列表执行该命令,输出结果如下:

-1.0            1
-1.0 to -2.0    3
-2.1 to -3.0    1
-3.1 to -4.0    1
-4.0            2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:15:36