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

使用Awk按第三列每0.5单位间隔分组计算第四列平均值

问题背景

现有一份已经按第三列升序排序的文本文件,内容如下:

1 snp1 0.0 4
1 snp2 0.2 6
1 snp3 0.3 4
1 snp4 0.4 3
1 snp5 0.5 5
1 snp6 0.6 6
1 snp7 1.3 5
1 snp8 1.3 3
1 snp9 1.9 4

需求为按第三列每间隔0.5单位分组,计算每组第四列的平均值,期望输出如下:

1 snp1 0.0 4.4
1 snp6 0.6 6.0
1 snp7 1.3 4.0
1 snp9 1.9 4.0

可行Awk解决方案

awk '
BEGIN{
    interval=0.5
}
NR==1{
    pos=$3
    sum=$4
    cnt=1
    save_line=$0
    next
}
$3 >= pos+interval{
    split(save_line,arr," ")
    printf "%s %s %.1f %.1f\n",arr[1],arr[2],arr[3],sum/cnt
    pos=$3
    sum=0
    cnt=0
    save_line=$0
}
{
    sum+=$4
    cnt+=1
}
END{
    split(save_line,arr," ")
    printf "%s %s %.1f %.1f\n",arr[1],arr[2],arr[3],sum/cnt
}
' input

逻辑说明

  1. 初始化分组间隔为0.5,读入第一行时初始化当前分组的基准值、第四列累加和、行数计数器,同时保存分组起始行内容
  2. 每读入一行先判断是否达到下一分组阈值,若达到则先输出上一分组的计算结果,再重置新分组的所有参数
  3. 所有行都会累计第四列数值和对应行数
  4. 所有行读取完成后,输出最后一个分组的计算结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:06:03