如何统计文件中各username出现次数并按次数降序排序?
统计所有用户出现次数并排序的最优方法
嘿,这个需求用几个常用的Linux命令组合就能完美解决,而且能直接输出你想要的格式!
方法一:多管道组合(简洁直观)
这是最容易理解的方式,适合大多数日常场景:
grep -oP 'username=\K.*' file.txt | sort | uniq -c | sort -rn | awk '{print $1, $2}'
各部分作用拆解:
grep -oP 'username=\K.*':精准提取username=后面的用户名(-o只输出匹配的部分,\K用来忽略前面的username=前缀)sort:对用户名排序,确保后续uniq能正确统计重复项uniq -c:统计每个用户名的出现次数,输出带空格前缀的"次数 用户名"格式sort -rn:按次数从高到低排序(-r表示逆序,-n表示按数字值排序)awk '{print $1, $2}':去除多余前缀空格,输出整洁的"次数 用户名"格式
方法二:单awk进程(大文件更高效)
如果你的文件体积很大,单进程的awk脚本能减少多管道的开销,运行效率更高:
awk '/username=/{sub(/username=/,"",$0); count[$0]++} END{for(user in count) print count[user], user}' file.txt | sort -rn
各部分作用拆解:
/username=/:先筛选出包含username=的行sub(/username=/,"",$0):移除行中的username=前缀,只保留用户名count[$0]++:用数组记录每个用户名的出现次数END块:循环遍历统计数组,输出次数和用户名,最后用sort -rn完成降序排序
两种方法都能输出你想要的格式:
3 jdoe 2 dsmith 1 sjones
内容的提问来源于stack exchange,提问作者donmontalvo
相关产品推荐
相关产品推荐

