Se essa lista estivesse em file
, um por linha, eu faria algo como:
sort -nu file |
awk 'NR == FNR {rank[$0] = NR; next}
{print rank[$0]}' - file
Se estivesse em um zsh
$array
:
sorted=(${(nou)array})
for i ($array) echo $sorted[(i)$i]
Esse é o mesmo princípio que para a versão awk
acima, a classificação é o índice NR
/ (i)
no numericamente ( -n
/ (n)
) ordenado ( sort
/ (o)
), uniqued ( -u
/ (u)
) lista de elementos.
Para sua classificação média:
sort -n file |
awk 'NR == FNR {rank[$0] += NR; n[$0]++; next}
{print rank[$0] / n[$0]}' - file
O que dá:
5
7
1
6
2.5
2.5
4
(use sort -rn
para reverter a ordem, como na sua versão do Google Spreadsheet ).