Требуется помощь массива Awk - усреднение - PullRequest
2 голосов
/ 18 августа 2010

Вот пример типа данных, которыми я пытаюсь манипулировать:

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

... Чего я надеюсь добиться, так это сгенерировать среднее значение на основе номера эпохи слева. Например, добавление 992, 993, 994, 995, 995, 996, 996, 996, 998 и деление на число уникальных экземпляров времени эпохи «1213954013615», что делается для каждой уникальной группы времен эпохи.

Вот что у меня есть:

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

Но это, конечно, делится на общее количество эпох, мне нужно что-то эквивалентное "uniq" для этого, но не могу найти эквивалент в awk.

Большое спасибо.

1 Ответ

3 голосов
/ 18 августа 2010

У вас почти есть это. Легко подсчитать количество экземпляров каждой эпохи в отдельном массиве n :

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