A abordagem mais simples seria classificar no campo de pontuação:
$ sort -nk2 file | awk '{k[$NF]=$0} END{for (i in k){print k[i]}}'
UserID score UserName
8543 200 Jill
1234 200 Jack
5678 100 John
Ou, em perl :
sort -nk2 file | perl -ane '$k{$F[$#F]}=$_; END{print "$k{$_}" for keys(%k)}'
O -a flag para perl ativa a divisão automática, basicamente, ele se comportará como awk e dividirá cada linha no espaço em branco, salvando os campos na matriz @F . O -n significa processar a linha do arquivo de entrada, por linha.
$F[$#F] é o último elemento de @F , portanto, o último campo: o nome de usuário. $k{$F[$#F]}=$_; salva cada linha no hash %k , onde as chaves são os nomes de usuários, sobrescrevendo o que estava lá antes. Como primeiro classificamos o arquivo, isso significa que $k{username} será a pontuação mais alta para a entrada desse nome de usuário. No final, imprimimos cada linha salva em %k .