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

用于计算多个文件的平均值的Linux Bash脚本,linux,bash,shell,Linux,Bash,Shell,我正在写一个scipt,它将接受它将执行任务的文件夹的参数。其目的是计算评论的平均数量,并将结果打印在文件名旁边。我只为一个文件编写了脚本,它可以正常工作,但我找不到任何解决方案在多个文件上执行。我应该得到这样的输出 % ./averagereviews.sh path_to_folder hotel_11212 3.51 hotel_2121 2.62 hotel_31212 2.43 我只为一家酒店完成了这个任务,代码是这样的 grep "<

我正在写一个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}'
但我应该这样做,以多个.dat文件在一个文件夹中打印酒店的名称。我该怎么做呢?

你可以“作弊”


简单地说,我将首先对所有文件执行
cat
ing操作,并将您的命令应用于其余文件-使其行为类似于管道是单个文件。

但我应该在文件夹之外执行它。例如,我现在在我的主文件夹中,包含所有数据的文件夹在data_文件夹中,我的脚本也在主文件夹中,与data_文件夹处于同一级别。另外,我的脚本应该将文件夹名称作为参数。因此,当我写入./averagereviews.sh folder_name时,应该会找到该文件夹中每个数据文件的平均值。然后我假设您有一种方法可以找到属于“数据文件”的文件。类似于“他们的名字是data#####txt”。我更新了我的答案以考虑你的评论。实际上我不明白你怎么能编辑数据文件。它是一个目录,所以它给出了一个错误,你不能猫到一个目录。也许是我的错,我解释不正确。现在我在一个名为work的文件中,我有我的脚本,还有一个名为“data_files”的文件夹。当我运行脚本时,它应该获取所有数据文件(例如dataFile1.dat),并使用数据文件中的信息获取所有数据文件的平均值。每个数据的平均值。我为此编写了
find
调用。如果您的“data_files”文件夹只包含数据文件,您可以简单地将我的
data_files=$(查找$1-name“data*”)
替换为
data_files=$(ls$1/dataFile*.dat)
。我这样做了,但它仍然给我错误“cat:data_files:是一个目录”
    ./averagereviews.sh  hotel_190158.dat
    4.00578
 > 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/