我有一个文件夹my_folder
,其中包含800多个名为myfile_*.dat
的文件,其中*是每个文件的唯一ID。在我的文件中,我基本上有各种重复的字段,但我感兴趣的是<rating>
字段。此字段的行如下所示:<rating>n
其中n是评分。我有一个脚本,它总结了每个文件的所有评级,但现在我必须将它除以<rating>n
的行数,以获得每个文件的平均评分。这是我的剧本:
dir=$1
cd $dir
grep -P -o '(?<=<rating>).*' * |awk -F: '{A[$1]+=$2;next}END{for(i in A){print i,A[i]}}'|sort -nr -k2
我认为我会使用grep -c <rating> myfile_*.dat
来计算匹配行的数量,然后将每个文件的总和除以这个数量,但是不知道在我的脚本中将它放在哪里?任何建议都表示赞赏。
我的脚本在命令行中将文件夹名称作为参数。
INPUT FILE
<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...
答案 0 :(得分:2)
只需设置另一个数组L
即可跟踪项目数:
grep -P -o '(?<=<rating>).*' * |
awk -F: '{A[$1]+=$2;L[$1]++;next}END{for(i in A){print i,A[i],A[i]/L[i]}}' |
sort -nr -k2