【问题标题】:Calculating the average value of data in multiple files计算多个文件中数据的平均值
【发布时间】:2019-08-01 12:41:20
【问题描述】:

我知道上述问题的措辞很不清楚,但我会尽力解释。我有一组数据,其中包含不同的酒店 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}'

这会取所有数据的平均值,并以 (hotel id) (average) 格式为每个酒店 id 输出一个数字而不是平均值。

希望我的解释足够。

【问题讨论】:

    标签: bash shell unix terminal command


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 谢谢你的工作!如果我想使用 sort 命令对这些数据进行排序,那么有什么简单的方法可以做到这一点?
    • 多种方式,一种方式管道(|)到sort -nrk2
    • 感谢您的帮助!
    • 最后澄清一下,我怎样才能使输出有 2 位小数?我尝试使用 printf 但它改变了输出格式。
    • 你可以在 awk 中使用 printf ;类似于link 中显示的内容
    猜你喜欢
    • 2013-07-19
    • 2015-08-29
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2022-01-24
    相关资源
    最近更新 更多