2017-02-23 61 views
0

我正在写一个scipt,它将接受它将完成这项工作的文件夹的参数。目的是计算平均评论数量并在文件名称旁边打印结果。我只写了一个文件的脚本,它的工作原理没问题,但我找不到任何解决方案在多个文件上执行它。我应该得到一个像这样的输出;Linux Bash脚本,用于计算多个文件的平均值

% ./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文件的文件夹。我怎样才能做到这一点 ?

回答

1

你可以 “欺骗”

> 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荷兰国际集团的所有文件,并应用命令到其余的 - 让它像管道一样是一个文件。

+0

但我应该在文件夹之外实现它。例如,我现在位于我的home文件夹中,包含所有数据的文件夹位于data_folder中,而且我的脚本位于home文件夹中,与data_folder的级别相同。另外我的脚本应该将文件夹名称作为参数。因此,当我写入./averagereviews.sh文件夹名称时,应该为该文件夹中的每个数据文件找到含义。 –

+0

然后我想你有一个找到“数据文件”文件的方法。像“他们的名字是数据_ ###。txt”。我更新了我的答案,将您的意见纳入考虑范围。 – fzd

+0

其实我不明白你怎么可以cat data_files。它是一个目录,所以它会给你错误提供一个目录。也许是我的错误,我无法正确解释。现在我在一个名为work的文件中,我有我的脚本和一个名为“data_files”的文件夹。当我运行我的脚本时,它应该获取所有数据文件(例如dataFile1.dat),并使用数据文件中的信息取所有数据文件的平均值。平均值为每个数据。 –