计算多个子目录中值的出现次数

计算多个子目录中值的出现次数

我如何编写以下脚本来计数我下面有一个目录结构

dir1/diskname 
dir2/diskname
dir3/diskname
dir4/diskname

diskname 包含一个值:

hitachi
samsung
LG

我想要一个脚本来扫描磁盘名中的每个目录并计算值

例如,如果 dir1,2,4 中的文件是 hitachi,3 是 samsung,结果将是

hitachi 3
samsung 1 

答案1

正如 Panki 所建议的在评论中:

cat dir*/diskname | sort | uniq -c

这将使用 . 将所有diskname文件连接到一个流中cat。这sort实用程序对这些数据进行排序,并uniq -c计算每行连续出现的次数。

一般情况下,当有数千文件名diskname,该cat命令将失败并出现“参数列表太长”错误,因为文件名通配模式dir*/diskname将扩展到太多路径名。在这种情况下,您可以选择循环遍历所有文件:

for name in dir*/diskname
do
    cat "$name"
done | sort | uniq -c

或者,您可以使用find(假设当前目录是dir*找到所有目录的位置):

find . -maxdepth 2 -path './dir*/diskname' -type f -exec cat {} + | sort | uniq -c

相关内容