私は次のawkワンライナーを持っています:
{dict[$2"@"$6]=($(NF-2)/($(NF-2)+$NF))*100 } END {for (a in dict) { printf "%s %d :" , a, int(dict[a]) }}
私が必要としているのは、各辞書キーの組み合わせの値に追加することです
($(NF-2)/($(NF-2)+$NF))*100 " out of" $(NF-2)+$NF
だから私はawkにすべての数学を計算させ、次に文字列を作成してそれを辞書の値として入れたいと思っています。私はすでにスペースと角かっこをいくつか組み合わせて試しましたが、それでもうまくいきませんでした。
変数は入力ストリームから入力されます:
$2 - host , not unique in input stream
$3 - partition , not unique in input stream
$NF - space avail
$NF-2 - space used
$(NF-2)+$NF - gives you overall capacity of partiton
出力は
80% host1@/local/1
期待される出力:
80% host1@/local/1 out of 112G
- - - - - - - - - - - 解決 - - - - - - - - - - - - - - --------
以下の良いキャッチで、私はこれを解決しました。問題は、printf部分でint()を実行したことで、出力が切り捨てられました。さらに、ラップアラウンドシェル部分で他の問題に直面したため、最終的なコードは、質問をすることを期待していたものとは異なりました。
'{key=($2 "@" $6 " out of " int((($(NF-2)+$NF)/1000)/1000) "GB" ) ; dict[key]=($(NF-2)/($(NF-2)+$NF))*100 } END {for (a in dict) { printf "%s , %d :" , a, int(dict[a]) }}'
私の場合、dict値は文字列にできないため、「out of」と容量部分を辞書キーに移動しました。さらに、INTと比較します。