awk '{c[$1]++;s[$1]+=$2}END{for(i in c)print i,(s[i]/c[i])}' test.in
Mais claramente:
awk '
{ # Every line
# Increment the key, add value to its sum
count[$1]++
sum[$1] += $2
}
END {
# Go through all the numbers we saw
for(number in count) {
# Print the number followed by the average (sum/count) of its values
print number, (sum[number]/count[number])
}
}
' test.in
Observe que os números serão exibidos em ordem aleatória mais ou menos (algum hash das chaves). Obter min e max não é tão ruim, basta adicioná-los depois de count
e sum
no primeiro bloco. A mediana exige o rastreamento de todos os números. Você pode fazê-lo com uma matriz 2d (ou emulação do awk), mas vou deixar isso como um exercício para o leitor.