2013-06-20 144 views
2

的結果我有一個測試文件:awk。四捨五入師

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 

爲什麼結果四捨五入? 感謝您的解釋!

回答

3

在第一個腳本要打印的價值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 
+1

WOW!是!究竟!坦克你非常非常)) – Taron