从计数文件中获取概率

时间:2012-05-18 23:09:33

标签: unix math awk terminal

我有一堆文件,其中的行看起来像这样

 54 apples
  7 oranges
  1 bananas

我想获得每一个的可能性。也就是说,我希望得到以下内容:

 0.87 apples
 0.11 oranges
 0.02 bananas

我可以轻松地为每个文件单独输入

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

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

这是规范awk,不会将文件存储在内存中:

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

HTH

答案 2 :(得分: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