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

使用awk创建自定义区间的类直方图输出(大文件替代R方案)

自定义区间直方图统计(Awk实现)

没问题,我来给你写一个易懂的awk脚本,完全符合你的需求,Linux新手也能快速上手!

核心逻辑

我们要把每个数值映射到对应的区间(左闭右开,比如[0.6,0.7)包含0.624999这类数值),统计每个区间的出现次数,最后从起始区间开始按顺序输出结果,即使区间没有数据也会输出0。

Awk脚本实现

你可以把下面的内容保存成histogram.awk文件,也可以直接在命令行运行:

BEGIN {
    start = 0       # 区间起始值,可自定义
    step = 0.1      # 区间步长,可自定义
    max_val = 0     # 记录数据中的最大值,用来确定最后一个区间
}

# 遍历每行的所有数值
{
    for (i=1; i<=NF; i++) {
        val = $i
        # 计算当前数值所属的区间下界
        bin = int(val / step) * step
        # 给对应区间的计数加1
        count[bin]++
        # 更新最大值,确保最后能覆盖所有数据的区间
        if (val > max_val) max_val = val
    }
}

END {
    # 从起始区间开始,逐个输出直到覆盖最大数值的区间
    current = start
    while (current <= max_val + step) {
        next_bin = current + step
        # 若区间无数据,count[current]为空,加0确保输出0而非空
        printf "%.1f %.1f %d\n", current, next_bin, count[current]+0
        current = next_bin
    }
}

如何使用

假设你的数据文件叫data.txt,直接在终端运行:

awk -f histogram.awk data.txt

如果不想保存脚本,也可以用单行命令快速测试:

awk 'BEGIN{start=0;step=0.1;max_val=0} {for(i=1;i<=NF;i++){val=$i;bin=int(val/step)*step;count[bin]++;if(val>max_val)max_val=val}} END{current=start;while(current<=max_val+step){next_bin=current+step;printf"%.1f %.1f %d\n",current,next_bin,count[current]+0;current=next_bin}}' data.txt

针对你的示例数据测试

你的输入数据:1.37987 1.21448 0.624999 1.28966 1.77084 1.088 1.41667

运行后会输出:

0.0 0.1 0
0.1 0.2 0
0.2 0.3 0
0.3 0.4 0
0.4 0.5 0
0.5 0.6 0
0.6 0.7 1
0.7 0.8 0
0.8 0.9 0
0.9 1.0 0
1.0 1.1 1
1.1 1.2 0
1.2 1.3 2
1.3 1.4 1
1.4 1.5 1
1.5 1.6 0
1.6 1.7 0
1.7 1.8 1
1.8 1.9 0

完全匹配你想要的输出格式。

自定义调整技巧

  • 修改区间起点/步长:只需要改BEGIN块里的start和step值,比如想从0.5开始、步长0.2,就设start=0.5、step=0.2
  • 调整输出小数位数:把printf里的%.1f改成%.2f就能输出两位小数,按需修改即可
  • 处理超大文件:awk天生适合处理大文本,不需要担心性能问题,直接运行就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:26:18