You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用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

火山引擎 最新活动