我正在编写一个 scipt,它将采用它将完成工作的文件夹的参数。目的是计算平均评论数并将结果打印在文件名旁边。我只为一个文件编写了脚本,它工作正常,但我找不到任何解决方案来对多个文件执行此操作。我应该得到类似的输出;
% ./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 文件执行此操作并打印酒店名称。我该怎么做?
最佳答案
你可以“作弊”
> 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/
简单地说,我首先cat
所有文件,然后将你的命令应用到其余文件 - 让它的行为就像管道是单个文件一样。
关于用于计算多个文件平均值的 Linux Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42419928/