计算平均值

时间:2016-02-20 17:36:33

标签: bash file unix

我有很多文件,每个文件都包含酒店的评论。对于每个文件,我想编写一个脚本来计算以Overall开头的行上所有值的平均值。

2 个答案:

答案 0 :(得分:2)

这样的东西
hotel1:  8.7

将是打印>

它使用<Overall作为分隔符,很好地将$2之后的数字提供给变量>。只有在<Overall>xyz中的>是包含`的行中的第一个/<Overall>/时,此功能才有效。

模式<Overall>将总和限制为包含{'Name': {'Item': ['John', 'Sally']}} 的行。

答案 1 :(得分:1)

如果您只想查找<Overall>之后的数字,则可以执行以下操作:

awk -F "<Overall>" 'NF>1{sum+=$2;c+=1} END {print sum/c}' file

使用您的示例打印2.5

如果您想要所有数字字段的平均值:

awk -F "<|>" '$3~/^-?[0-9.]+$/{a1[$2]+=$3; a2[$2]+=1;} END{ for (e in a1){ print "AVG "e": "a1[e]/a2[e]}}' file

打印:

AVG Overall: 2.5
AVG Cleanliness: 3
AVG Location: 2.5
AVG Overall Rating: 3.5
AVG Rooms: 2.5
AVG Check in / front desk: 3
AVG Business service: 1.5
AVG No. Reader: 0
AVG Service: 0
AVG Value: 2.5
AVG No. Helpful: 0