You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计文件路径列表中同名文件次数并按出现次数降序排序

错误原因

原命令存在三处核心问题:

  1. awk变量误用:$NR中的NR是awk内置的当前处理行号变量,并非最后一个字段的标识:处理第1行时取第1个字段、第2行取第2个字段、第3行取第3个字段,后续行因字段数不足直接输出空值,完全无法提取到路径末尾的文件名。
  2. 缺少前置排序:uniq -c只能统计相邻的重复行,原命令未先将同名文件排序到相邻位置,即使提取到文件名也会出现统计错误。
  3. sort参数缺失:原命令的sort默认按字典序升序排列,无法实现按出现次数从高到低排序的需求。
可直接运行的正确命令

基础修正版(逻辑直观易理解)

awk -F '/' '{print $NF}' file.txt | sort | uniq -c | sort -nr

高效版(大文件场景性能更优)

awk -F '/' '{count[$NF]++} END{for(name in count) print count[name], name}' file.txt | sort -nr

运行任意一条命令,都能得到符合预期的统计结果:

3 foo
2 bar
1 bar2
1 foo2

注:出现次数相同的文件默认按文件名字典序排列,若需要调整同次数下的排序规则,可修改sort的匹配字段参数即可。

命令逻辑说明
  • -F '/':指定斜杠/为字段分隔符,将文件路径按目录层级拆分
  • $NF:awk内置变量,代表当前行拆分后的最后一个字段,也就是路径最末端的文件名
  • 基础版中第一个sort:将所有文件名按字典序排序,让同名文件相邻,满足uniq的统计要求
  • uniq -c:统计相邻重复行的出现次数,输出格式为「出现次数 文件名」
  • 高效版中的count[$NF]++:通过数组直接累计每个文件名的出现次数,不需要额外排序、调用uniq,处理GB级大文件时速度优势明显
  • 末尾的sort -nr:-n表示按数值规则排序,-r表示逆序(从大到小),最终实现按文件出现次数从高到低排列的效果。

内容的提问来源于stack exchange,提问作者user1869474

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:42:19