コマンドラインで値のリストを数値で分割する方法は?

コマンドラインで値のリストを数値で分割する方法は?

Unixユーティリティを使用して単純なプログラムをコマンドラインに変換しようとしています。たとえば、周波数リストがある場合(uniqを介してパイピングしてソートした後)

5 x
4 y
1 z

頻度ではなく発生回数の一部を印刷したい。

0.5 x
0.4 y
0.1 z

(これを行うPythonプログラムがありますが、コマンドライン自体で実行できるかどうかを知りたいです。)

これまでの合計を計算してみました。

<...>| awk -F" " '{print $1}' | tr '\n' +; echo 0 | bc

5+1+4+0ただし、これは計算せずに出力のみを提供します。

編集:合計を得ました。上記のコマンドを次のように修正しました。

<...>| awk -F" " '{print $1}' | echo $(tr '\n' +; echo 0) | bc > sum 

正しい結果が合計に保存されます。さて、元のリストを合計で分割して表示したいと思います。

ベストアンサー1

awk '{ f[$2] = $1; SUM += $1} END { for (i in f) { print f[i]/SUM, i } }' </tmp/data

おすすめ記事