计算多个文件中数据的平均值

问题描述 投票:0回答:1

我知道上述问题的措词非常清楚,但我会尽力解释。我有一组数据,包括不同的酒店ID值和每个酒店的一组评级。这是我现在的代码:

cd "$1" || exit 1

grep "<Overall>" hotel_*.dat | sed 's/\.dat:<Overall>/ /'

(代码基本上从文件中提取数据并以更整洁的格式输出)

这是代码的输出:terminal output sample

正如您在图像中看到的,我的数据由两列组成。我想要做的是获取每个酒店ID的第2列中的数据的平均值,因此基本上得到输出:(酒店ID)(平均值)。每个酒店ID都应该有自己的平均值。

我尝试做的是:

cd "$1" || exit 1

grep "<Overall>" hotel_*.dat | sed 's/\.dat:<Overall>/ /' | awk '{SUM+= $2} END {print SUM/NR}'

这取了所有数据的平均值,只输出一个数字而不是每个酒店ID的平均值(酒店ID)(平均值)。

我希望我的解释足够了。

bash shell unix terminal command
1个回答
0
投票

您可以使用awk进行聚合,如下所示:

$ cat file.txt
hotel_1 10
hotel_2 15
hotel_1 5

$ awk '{sum[$1] += $2; counts[$1]++;} END {for (i in sum) print i, sum[i]/counts[i];}'  file.txt
hotel_1 7.5
hotel_2 15
© www.soinside.com 2019 - 2024. All rights reserved.