Awk 啊。除法结果的四舍五入

Awk 啊。除法结果的四舍五入,awk,division,Awk,Division,我有一个测试文件: 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="%.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
为什么结果是四舍五入的?
谢谢你的解释

在第一个脚本中,您正在打印值
n
awk
知道将其视为一个数字,但是在第二个脚本中,您正在打印
n“el
,该值被视为一个字符串,因为您使用的是字符串串联。您要做的是打印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

哇!对确切地你真是太好了