我有一堆文件看起来像这样
54 apples
7 oranges
1 bananas
我想得到每一个的概率。也就是说,我想要以下内容:
0.87 apples
0.11 oranges
0.02 bananas
我可以轻松地为每个文件单独计算总和
awk '{sum += $1} END {print sum}' input.txt
但我想知道如何计算概率。
除非您想两次运行该文件,否则您需要将所有行存储在内存中。
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
可能会更改顺序
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
这是规范awk
的,不会将文件存储在内存中:
awk 'FNR==NR { sum += $1; next; } { printf "%.2f %s\n", $1/sum, $2 }' input.txt{,}
高温高压