如何用Awk/Bash计算太阳黑子数据各年份12个月的平均值
解决方案
你可以通过Awk的关联数组按年份分组累加数值,最后遍历数组输出各年平均值即可,具体命令如下:
awk '{ year = $3 sum[year] += $6 cnt[year]++ } END { # 按年份升序输出结果 for (y=1749; y<=2005; y++) { # 四舍五入取整的逻辑和你举例的1749年结果81完全匹配 avg = int(sum[y]/cnt[y] + 0.5) print y, avg } }' sunspot.txt
代码说明
- 逐行处理阶段
- 取每行第三个字段
$3为年份值作为关联数组的键 sum[year]累加对应年份的太阳黑子数值$6cnt[year]统计对应年份的有效数据行数,即使存在个别年份缺数据的场景也能正常计算
- 取每行第三个字段
- 结束处理阶段
- 按你要求的1749到2005的年份范围遍历,计算每一年的平均值
- 加0.5后取整是为了实现四舍五入效果,不需要取整保留小数的话,直接把
int(sum[y]/cnt[y] + 0.5)改成sum[y]/cnt[y]即可
内容的提问来源于stack exchange,提问作者ltcrawsh
相关产品推荐
相关产品推荐

