我正在写一个scipt,它将获取它将完成工作的文件夹的参数。目的是计算平均评论数并在文件名旁边打印结果。我只编写了一个文件的脚本,它可以正常工作,但我找不到任何解决方案来处理多个文件。我应该得到像<; p>这样的输出
% ./averagereviews.sh path_to_folder
hotel_11212 3.51
hotel_2121 2.62
hotel_31212 2.43
...
我只为一家酒店完成了这项任务,代码就像这样;
grep "<Overall>" $1 | sed 's/<Overall>//g'| awk '{SUM += $1} END {print SUM/NR}'
这只是搜索文件中的单词“”并获取旁边的数字,然后添加这些数字并将总和除以NR以找到平均值。
当我运行它时,输出是给定酒店的平均值
./averagereviews.sh hotel_190158.dat
4.00578
但我应该在打印酒店名称的文件夹中对多个.dat文件执行此操作。我怎么能这样做?
答案 0 :(得分:1)
你可以&#34;作弊&#34;
> cat averagereviews.sh
#!/bin/bash
SUM=0
data_files=$(ls $1/dataFile*.dat)
cat $data_files | grep "<Overall>" | sed -e 's/<Overall>//g' | awk '{SUM += $1} END {print SUM/NR}'
并运行(从任何地方,无论您需要哪条路径)
> ~/tools/averagereviews.sh /tmp/data/
简单地说,我首先{{}} {{}}所有文件,然后将命令应用到其余文件中 - 让它的行为就像管道是单个文件一样。