Grupo Unix Awk por

Grupo Unix Awk por

Alguém pode me esclarecer como agrupar com base no nome de usuário e somar os valores, dividi-los pelo número de linhas desse nome de usuário específico. por exemplo abaixo.

root 25 oracle 25  batch 30  griduser 20 admin 35

root 55 oracle 45 batch 30  griduser 10

oracle 35 batch 30  griduser 30 xuser 45 admin 85

Minha saída deve ser a seguinte.

root 40 oracle 35 batch 30 griduser 20 xuser 45 admin 60

Desde já, obrigado

Responder1

Se você não se importa com a ordem de saída:

$ awk '{for(i=1;i<NF;i+=2){a[$i]+=$(i+1);b[$i]+=1}}
    END {
        for(i in a){
            printf "%s %d ",i,a[i]/b[i]
        }
        printf "\n"
    }' file
oracle 35 griduser 20 admin 60 root 40 xuser 45 batch 30 

informação relacionada