如何编写Bash脚本统计目录下拥有文件数量最多的用户
解决方法
你当前使用的uniq -c只能统计连续出现的相同用户名,所以同个用户的计数被拆分成了多条,只需要在现有脚本的输出后新增一段awk逻辑做全局汇总即可。
修改后的完整脚本
#!/bin/bash while read DIRNAME do # 给DIRNAME加双引号兼容带空格的目录路径 ls -l "$DIRNAME" | awk 'NR>1 {print $4}' | uniq -c done | awk ' # 汇总所有用户的总文件数 { user_total[$2] += $1 } END { max_num = 0 top_user = "" # 遍历找到总文件数最大的用户 for (username in user_total) { if (user_total[username] > max_num) { max_num = user_total[username] top_user = username } } print top_user }'
更精简的优化版本
可以省去uniq -c步骤,直接单次awk统计单个目录的用户计数,减少管道层级:
#!/bin/bash while read DIRNAME do ls -l "$DIRNAME" | awk 'NR>1 {cnt[$4]++} END {for(u in cnt) print cnt[u], u}' done | awk '{sum[$2]+=$1} END {for(u in sum) if(sum[u]>m) {m=sum[u];r=u} print r}'
测试输入/etc目录时,会直接输出预期结果root。
内容的提问来源于stack exchange,提问作者Nathace
相关产品推荐
相关产品推荐

