【问题标题】:awk. Rounding the result of division哦。舍入除法的结果
【发布时间】:2013-06-20 19:26:57
【问题描述】:

我有一个测试文件:

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

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

【问题讨论】:

    标签: awk division


    【解决方案1】:

    在第一个脚本中,您正在打印值 nawk 知道将其视为数字,但是在第二个脚本中您正在打印 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
    

    【讨论】:

    • 哇!!是的!确切地!坦克你非常非常))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多