【发布时间】:2016-02-25 13:01:49
【问题描述】:
我有一个 shell 脚本:
dir=$1
cd $dir
grep -P -o '(?<=<rating>).*' * |
awk -F: '{A[$1]+=$2;L[$1]++;next}END
{for(i in A){print i, A[i]/L[i]}}' | sort -nr -k2 |
awk '{ sub(/.dat/, " "); print }'
它总结了我文件夹中每个文件中<rating> 字段后面的所有数字,但现在我需要计算数字的标准偏差而不是获取平均值。通过将文件中每个评级与均方的差异相加,然后将其除以样本大小 -1。我不需要在文件夹中的每个文件中执行此操作,而是在 2 个特定文件中执行此操作,hotel_188937.dat 和 hotel_203921.dat。以下是其中一个文件的内容示例:
<Overall Rating>
<Avg. Price>$155
<URL>
<Author>Jeter5
<Content>I hope we're not disappointed! We enjoyed New Orleans...
<Date>Dec 19, 2008
<No. Reader>-1
<No. Helpful>-1
<rating>4
<Value>-1
<Rooms>3
<Location>5
<Cleanliness>3
<Check in / front desk>5
<Service>5
<Business service>5
<Author>...
repeat fields again...
第一个文件的样本大小为 127,平均值为 4.78,而第二个文件的样本大小为 324,平均值为 4.78。无论如何我可以改变我的脚本来计算这两个特定文件的标准偏差,而不是计算我目录中每个文件的平均值?感谢您的宝贵时间。
【问题讨论】:
标签: bash shell unix standard-deviation