如何使用awk根据两个单独的字段数据过滤文件?

输入文件由 3 个字段组成,以“|”分隔 如下:

TeamId|TeamName|TotalPlayers

TeamId 由唯一编号组成。TeamName 由几支英超足球队和 TotalPlayers 字段中相应的球员数组成。

其中2条记录如下:(这些记录属于可见测试用例之一)

103|Manchester United|12

105|Manchester City|13

代码要求:

我必须输出以曼彻斯特开头并拥有最多玩家数量的 TeamName。如果没有球队以曼彻斯特开始,那么它不应该是任何输出。即在上面的测试案例中,输出应该是曼城。

我的解决方案:

awk 'BEGIN{FS = "|";OFS = ",";}{if($2 ~ /^Manchester/){print $2, $3}}' | sort -n -k2 | awk -F , '(NR==1){print $1}'

这提供了正常测试用例的预期输出,但隐藏的测试用例失败了。我可以对此进行哪些更改或任何其他更简单的方法来实现相同的...

还推荐任何我可以通过解决来练习此类 Unix 编码问题的网站。

回答

我必须输出以曼彻斯特开头并拥有最多玩家数量的 TeamName。如果没有球队以曼彻斯特开始,那么它不应该是任何输出。即在上面的测试案例中,输出应该是曼城。

$ cat file 
TeamId|TeamName|TotalPlayers
103|Manchester United|12
105|Manchester City|13

$ awk -F'|' '$2~/^Manchester/ && $3 >max{max=$3; team=$2}END{if(team)print team}' file 
Manchester City


以上是如何使用awk根据两个单独的字段数据过滤文件?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>