このような行のファイルがたくさんあります
54 apples
7 oranges
1 bananas
これらのそれぞれの確率を取得したいと思います。つまり、私は次のものが欲しいです:
0.87 apples
0.11 oranges
0.02 bananas
各ファイルの合計を個別に簡単に確認できます
awk '{sum += $1} END {print sum}' input.txt
しかし、私は確率を計算する方法を考えています。
ファイルを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
これは標準awk
であり、ファイルをメモリに保存しません。
awk 'FNR==NR { sum += $1; next; } { printf "%.2f %s\n", $1/sum, $2 }' input.txt{,}
HTH
順序が変わる可能性があります
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