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