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

AWK脚本修改需求:分组统计结果换行输出及加号可视化

AWK数值分组统计脚本优化方案

原始脚本与当前输出

用于按区间统计第一列数值的原始AWK脚本:

{
    if ($1 <= 9) xd++
    else if ($1 > 9 && $1 <= 19) xd1++
    else if ($1 > 19 && $1 <= 29) xd2++
    else if ($1 > 29 && $1 <= 39) xd3++
    else if ($1 > 39 && $1 <= 49) xd4++
    else if ($1 > 49 && $1 <= 59) xd5++
    else if ($1 > 59 && $1 <= 69) xd6++
    else if ($1 > 69 && $1 <= 79) xd7++
    else if ($1 > 79 && $1 <= 89) xd8++
    else if ($1 > 89 && $1 <= 99) xd9++
    else if ($1 == 100) xd10++
} END {
    print "0-9 : "xd, "10-19 : " xd1, "20-29 : " xd2, "30-39 : " xd3, "40-49 : " xd4, "50-59 : " xd5, "60-69 : " xd6, "70-79 : " xd7, "80-89 : " xd8,  "90-99 : " xd9,  "100 : " xd10
}

当前执行命令及输出:

$ cat xd1 | awk -f script.awk
0-9 : 16 10-19 : 4 20-29 :  30-39 : 2 40-49 : 1 50-59 : 1 60-69 : 1 70-79 : 1 80-89 : 1 90-99 : 1 100 : 2

需求说明

  • 每个区间统计结果单独换行显示,示例:
0-9 : 16
10-19 : 4 
20-29 :
30-39 : 2
  • 在统计数值后添加对应数量的+符号可视化数量,示例:
0-9 : 16 ++++++++++++++++
10-19 : 4 ++++
20-29 :
30-39 : 2 ++

优化后的脚本

针对需求优化后的AWK脚本:

{
    if ($1 <= 9) cnt[0]++
    else if ($1 <= 19) cnt[1]++
    else if ($1 <= 29) cnt[2]++
    else if ($1 <= 39) cnt[3]++
    else if ($1 <= 49) cnt[4]++
    else if ($1 <= 59) cnt[5]++
    else if ($1 <= 69) cnt[6]++
    else if ($1 <= 79) cnt[7]++
    else if ($1 <= 89) cnt[8]++
    else if ($1 <= 99) cnt[9]++
    else if ($1 == 100) cnt[10]++
}
END {
    # 定义区间标签与索引映射
    labels["0-9"] = 0
    labels["10-19"] = 1
    labels["20-29"] = 2
    labels["30-39"] = 3
    labels["40-49"] = 4
    labels["50-59"] = 5
    labels["60-69"] = 6
    labels["70-79"] = 7
    labels["80-89"] = 8
    labels["90-99"] = 9
    labels["100"] = 10

    # 遍历输出每个区间结果
    for (label in labels) {
        idx = labels[label]
        count = cnt[idx] + 0  # 空值自动转为0
        printf "%s : ", label
        if (count > 0) {
            printf "%d ", count
            # 生成对应数量的+符号
            for (i=1; i<=count; i++) printf "+"
        }
        printf "\n"
    }
}

关键优化点

  • 换行实现:用printf "\n"强制每个区间单独换行,替代原脚本中print拼接多字段的方式,解决换行失效问题。
  • 可视化符号:通过循环生成与统计数等量的+,统计数为0时不显示符号与数值,匹配需求示例。
  • 代码简化:用数组cnt存储各区间计数,labels映射区间名称与索引,避免大量独立变量,提升代码可维护性。

执行优化后的脚本,输出将完全符合需求:

0-9 : 16 ++++++++++++++++
10-19 : 4 ++++
20-29 :
30-39 : 2 ++
40-49 : 1 +
50-59 : 1 +
60-69 : 1 +
70-79 : 1 +
80-89 : 1 +
90-99 : 1 +
100 : 2 ++

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:42:14