我有一个测试文件:
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
被视为字符串,因为您正在使用字符串连接。相反,您想要做的是 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
关于awk。对除法结果进行四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212164/