2010-08-18 4 views
2

Voici un exemple du type de données que je suis en train de manipuler:assistance tableau Awk nécessaire - en moyenne

1213954013615]: 992 
1213954013615]: 993 
1213954013615]: 994 
1213954013615]: 995 
1213954013615]: 995 
1213954013615]: 996 
1213954013615]: 996 
1213954013615]: 996 
1213954013615]: 998 
1213954247424]: 100 
1213954247424]: 1002 
1213954247424]: 1007 
1213954303390]: 111 
1213954303390]: 1110 
1213954303390]: 1111 
1213954303390]: 1112 
1213954303390]: 1114 
1213954303390]: 112 
1213954303390]: 112 
1213954303390]: 112 
1213954303390]: 112 

... Ce que j'espère atteindre est de générer une moyenne fondée sur l'époque numéro sur la gauche. Par exemple, en ajoutant 992, 993, 994, 995, 995, 996, 996, 996, 998 et en divisant par le nombre d'instances uniques du temps d'époque "1213954013615", ce faisant pour chaque groupe unique de temps d'époque.

Voici ce que j'ai jusqu'à présent:

awk '{arr[$1]+=$2} END {for (i in arr) {print "[epoch", i,arr[i]/NR}}' 

Mais cela, bien sûr, divise par le nombre total de fois d'époque, je besoin de quelque chose équivalent à « uniq » pour cela, mais ne trouve pas un équivalent en awk.

Merci beaucoup.

Répondre

3

Vous l'avez presque. Il est facile de compter le nombre de cas de toutes les époques dans un tableau séparé n:

awk '{arr[$1]+=$2; ++n[$1]} END {for (i in arr) {print "[epoch", i,arr[i]/n[i]}}' 
+0

réponse la plus rapide jamais. Fonctionne avec brio. Merci schot! –

+0

@Jimjim Je n'ai eu qu'à ajouter quelques caractères à votre propre solution, content d'être utile. – schot

+0

@Jimjim, vous devriez envisager d'accepter cette réponse si cela fonctionne pour vous. –