2012-05-18 13 views
2

我有一個看起來像這樣的從計數的文件中獲取概率

54 apples 
    7 oranges 
    1 bananas 

我想獲得每一項的概率行一堆文件。也就是說,我想有以下幾點:

0.87 apples 
0.11 oranges 
0.02 bananas 

我可以很容易地在awk的總和中的每個文件

awk '{sum += $1} END {print sum}' input.txt 

但我想知道如何計算概率。

回答

1

這是典型awk並不會存儲在內存中的文件:

awk 'FNR==NR { sum += $1; next; } { printf "%.2f %s\n", $1/sum, $2 }' input.txt{,}

HTH

2

除非您要遍歷文件兩次,否則您需要將所有行存儲在內存中。

awk '{sum += $1; line[NR,1] = $1; line[NR,2] = $2} END{for(i=0; i<NR; i++) print line[i,1]/sum, line[i,2]}' file 
1

可以更改訂單

awk '{n[$2]=$1} END {for (fruit in n) printf("%.2d %s\n", n[fruit]/NR, fruit)}' file 

或保存訂單

awk -v lines="$(wc -l < file)" '{$1 = sprintf("%.2d", $1/lines}; print' file