2

我有一个测试文件:

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

为什么结果是四舍五入的?感谢您的解释!

4

1 回答 1

3

在第一个脚本中,您正在打印该值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
于 2013-06-20T11:20:47.590 回答