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

Unix Shell:用awk/sed按文件名聚合关联用户名

用awk实现文件名与对应去重用户名的聚合

核心最简命令(字典序输出)

'{fn=$1; sub(/.*\//, "", fn); user=$NF} !seen[fn,user]++ {map[fn] = map[fn] ? map[fn] "," user : user} END{for(f in map) print f, map[f]}' input.txt

命令解析

  • 提取文件名:取每行第一个字段(带路径的文件名),剔除路径部分只保留纯文件名
  • 提取用户名:直接取每行最后一个字段作为用户名
  • 去重逻辑:用二维数组seen[fn,user]记录「文件名-用户名」组合,避免同一用户重复出现在同一文件的列表中
  • 聚合存储:用数组map[fn]保存每个文件名对应的用户列表,首次添加用户直接赋值,后续用逗号拼接追加
  • 输出结果:遍历map数组,按字典序输出所有文件名及对应用户列表

保留首次出现顺序的版本

如果需要输出顺序与输入中文件名首次出现的顺序一致,可添加顺序记录数组:

'{fn=$1; sub(/.*\//, "", fn); user=$NF} !seen[fn,user]++ {if(!(fn in map)) order[++cnt]=fn; map[fn] = map[fn] ? map[fn] "," user : user} END{for(i=1;i<=cnt;i++) print order[i], map[order[i]]}' input.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:12:50