我有很多文件,每个文件都包含酒店的评论。对于每个文件,我想编写一个脚本来计算以Overall开头的行上所有值的平均值。
答案 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