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 

相关内容