awk。对除法结果进行四舍五入

标签 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="%.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/

相关文章:

awk 大于小于

jquery - 悬停动画后无法弄清楚如何使文本出现在 div 中

c - 将两个表示为 unsigned long long 链表的极大数相除

python - 如何在 python 数据框的单个列中划分元素?

bash - 如果前一行下面的行等于第一列的特定值,则打印两行

c++ - 在两个方向上寻找搜索算法 - c/c++/awk

linux - 如何使用 linux cli 忽略 csv 文件中的任何特定列数据?

unix - 根据每个文件之间的空行将文本文件的段落拆分为多个文件

python - 用python划分两个数据框

swift - Swift 中的数学除法