gpt4 book ai didi

unix - 使用awk的小时(行)平均列数

转载 作者:行者123 更新时间:2023-12-04 13:29:25 25 4
gpt4 key购买 nike

我在文件中有以下各行,我希望按小时获取第三列的平均值。

2010-10-28 12:02:36: 5.1721851 secs
2010-10-28 12:03:43: 4.4692638 secs
2010-10-28 12:04:51: 3.3770310 secs
2010-10-28 12:05:58: 4.6227063 secs
2010-10-28 12:07:08: 5.1650404 secs
2010-10-28 12:08:16: 3.2819025 secs

2010-10-28 13:01:36: 2.1721851 secs
2010-10-28 13:02:43: 3.4692638 secs
2010-10-28 13:03:51: 4.3770310 secs
2010-10-28 13:04:58: 3.6227063 secs
2010-10-28 13:05:08: 3.1650404 secs
2010-10-28 13:06:16: 4.2819025 secs

2010-10-28 14:12:36: 7.1721851 secs
2010-10-28 14:23:43: 7.4692638 secs
2010-10-28 14:24:51: 7.3770310 secs
2010-10-28 14:25:58: 9.6227063 secs
2010-10-28 14:37:08: 7.1650404 secs
2010-10-28 14:48:16: 7.2819025 secs

我已经做好了
cat filename | awk '{sum+=$3} END {print "Average = ",sum/NR}'

与输出
Average =  4.49154

以获得整个文件的平均值,但要按小时分割平均值。在将输出传递到awk之前,我可以花一个小时潜入grep,但是希望,我希望能用一根衬纸来做。

理想情况下,输出将类似于
Average 12:00 = _computed_avg_
Average 13:00 = _computed_avg_
Average 14:00 = _computed_avg_

等等。

不一定要寻找答案,而是希望被指出正确的方向。

最佳答案

我将字段定界符设置为冒号,然后针对数组中的不同键在关联数组中进行汇总,最后计算平均值:

gawk -F: 'NF == 4 { sum[$1] += $4; N[$1]++ } 
END { for (key in sum) {
avg = sum[key] / N[key];
printf "%s %f\n", key, avg;
} }' filename | sort

根据您的测试数据,可以得出:
2010-10-28 12 4.348022
2010-10-28 13 3.514688
2010-10-28 14 7.681355

即使数据不是按时间顺序排列,这也应该会产生正确的答案(例如,您将两个日志文件不按顺序连接在一起)。请注意,gawk将对数字“3.123秒”的值求和。最后的排序按时间顺序显示平均值。不能保证按键会按时间顺序打印。

关于unix - 使用awk的小时(行)平均列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com