Obtenir des probabilités à partir d’un fichier de comptes

J’ai un tas de fichiers avec des lignes qui ressemblent à ceci

54 apples 7 oranges 1 bananas 

Je voudrais connaître les probabilités de chacun de ces éléments. C’est-à-dire que je veux avoir les éléments suivants:

  0.87 apples 0.11 oranges 0.02 bananas 

Je peux facilement attendre une sum pour chaque fichier individuellement

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

Mais je me demande comment calculer les probabilités.

Ceci est un awk canonique et ne stocke pas le fichier en mémoire:

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

HTH

À moins que vous ne souhaitiez exécuter le fichier deux fois, vous devrez stocker toutes les lignes en mémoire.

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

peut changer la commande

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

ou pour conserver la commande

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