Группа Unix Awk по

Группа Unix Awk по

Может ли кто-нибудь объяснить, как сгруппировать данные по имени пользователя, а затем суммировать значения и разделить их на количество строк для этого конкретного имени пользователя. Например, как показано ниже.

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

Мой вывод должен быть следующим.

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

Заранее спасибо

решение1

Если вас не смущает порядок вывода:

$ 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 

Связанный контент