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 

関連情報