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
.