如何通过另一个命令的输出来划分我的脚本输出?

时间:2016-02-24 17:18:46

标签: bash awk grep

我有一个文件夹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...

1 个答案:

答案 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