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

标签 linux bash shell

我正在编写一个 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/

相关文章:

linux - Scrapy:ModuleNotFoundError:没有名为 'scrapoxy' 的模块

linux - linux中运行Electron的最小gui系统是什么

linux - 在没有日期功能的bash中将数字日期转换为字母日期

bash - 如何用制表符补全替换命令行参数?

linux - 我是否可以正确设置此脚本以根据用户输入运行特定命令?

mysql - 如何将 shell 命令的结果分配给 MySQL 变量?

linux - 可以安全地假设 sh 已安装吗?

linux - 如何将 dd 命令的输出重定向到/dev/null?

linux - 翻转 shell 脚本

python - 在 Raspberry Pi 启动时启动 shell 脚本