Unix Awk gruppieren nach

Unix Awk gruppieren nach

Kann mir jemand erklären, wie ich nach Benutzernamen gruppiere und die Werte summiere und durch die Anzahl der Zeilen dieses bestimmten Benutzernamens dividiere, z. B. unten.

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

Meine Ausgabe sollte wie folgt aussehen.

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

Dank im Voraus

Antwort1

Wenn Ihnen die Ausgabereihenfolge nichts ausmacht:

$ 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 

verwandte Informationen