如何用Awk命令找出文件中出现次数最多的球队名(不使用uniq -c)
如何用Awk命令找出文件中出现次数最多的球队名(不使用uniq -c)
没问题,我来帮你用纯Awk搞定这个需求,完全不用uniq -c,一步一步来~
核心思路
Awk的数组天生适合做这种频率统计:我们可以用一个数组记录每个球队的出现次数,等把整个文件都扫完之后,再遍历数组找出次数最多的那个球队就行。
针对你的文件的具体实现
先看你的示例文件,第一行是表头Player | team,我们需要跳过这行,然后统计每行的第2个字段(球队名)。
这里给你两种写法,一种是可读性更好的单独脚本,另一种是直接能用的一行命令:
1. 单独Awk脚本写法
新建一个脚本文件比如find_most_team.awk,内容如下:
# 跳过第一行的表头 NR == 1 { next } # 统计每个球队的出现次数:数组count的键是球队名,值是对应次数 { count[$2]++ } # 所有行处理完之后,找出次数最多的球队 END { # 初始化最大次数和对应球队的变量 max_count = 0 most_team = "" # 遍历统计数组里的每个球队 for (team in count) { # 如果当前球队的次数比记录的最大次数多,就更新变量 if (count[team] > max_count) { max_count = count[team] most_team = team } } # 输出最终结果 print "出现次数最多的球队是:" most_team ",共出现" max_count "次" }
然后运行脚本,假设你的数据文件叫players_list.txt,执行命令:
awk -f find_most_team.awk players_list.txt
2. 一行命令写法
如果不想单独写脚本,也可以把代码直接写到命令行里:
awk 'NR == 1 { next } { count[$2]++ } END { max=0; t=""; for (i in count) if (count[i]>max) {max=count[i]; t=i} print "出现次数最多的球队是:" t ",共出现" max "次" }' players_list.txt
测试你的示例数据
把你给的示例数据放到players_list.txt里:
Player | team DiMaria Benfica Otamendi Benfica Robertocarlos Madrid JoaoFelix Benfica Cristiano Sporting Maldini Milan
运行上面的命令,会输出:
出现次数最多的球队是:Benfica,共出现3次
完全符合你的需求~
补充说明
如果遇到多个球队出现次数相同且都是最多的情况,上面的脚本只会输出最后一个遍历到的球队。如果需要把所有并列第一的球队都列出来,可以稍微修改END块的代码,比如把符合条件的球队存到一个数组里,最后一起输出。不过你的需求里只需要找出出现最多的,这个基础版本就够用啦。
备注:内容来源于stack exchange,提问作者Andre Freitas




