хорошо Округление результата деления

У меня есть тестовый файл:

user1   230230  1970
user2   313221  1978
user5   212334  1924
user3   313221  1987
user4   212345  1999
user3   123456  1983
user5   121212  1903
user2   234234  1992
user3   124690  1922
user5   092343  1945

когда я запускаю этот скрипт:

 awk 'BEGIN{OFMT="%.2f"}{user_arr[$1]+=$2;user_arr_count[$1]+=1;}END{for (el in user_arr) {n=user_arr[el]/user_arr_count[el];print n}}' test

я получаю результат

230230
273727.50
187122.33
212345
141963

но если я побегу

awk 'BEGIN{OFMT="%.2f"}{user_arr[$1]+=$2;user_arr_count[$1]+=1;}END{for (el in user_arr) {n=user_arr[el]/user_arr_count[el];print n" "el}}' test

Я получаю значение раундов:

230230 user1
273728 user2
187122 user3
212345 user4
141963 user5

почему результат округлен? Спасибо за объяснение!


person Taron    schedule 20.06.2013    source источник


Ответы (1)


В первом сценарии вы печатаете значение n, а awk знает, что его следует рассматривать как число, однако во втором сценарии вы печатаете n" "el, которое обрабатывается как строка, поскольку вы используете конкатенацию строк. Вместо этого вы хотите сделать print n,el.

Я бы написал сценарий так:

$ awk '{u[$1]+=$2;c[$1]+=1}END{for(i in u)print i,u[i]/c[i]}' OFMT="%.2f" file
user1 230230
user2 273727.50
user3 187122.33
user4 212345
user5 141963
person Chris Seymour    schedule 20.06.2013
comment
ВОТ ЭТО ДА!! да! В яблочко! Танк ты очень-очень )) - person Taron; 20.06.2013