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 

관련 정보