用于计算多个文件平均值的Linux Bash脚本

时间:2017-02-23 15:30:29

标签: linux bash shell

我正在写一个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文件执行此操作。我怎么能这样做?

1 个答案:

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

简单地说,我首先{{}} {{}}所有文件,然后将命令应用到其余文件中 - 让它的行为就像管道是单个文件一样。