2012-08-01 82 views
1

我旁邊AWK oneliner:AWK:CONCAT字符串在字典價值數

{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% [email protected]/local/1 

輸出預期:

80% [email protected]/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]) }}' 

I`ve移動「出」部分辭典鍵和能力,因爲字典值不能在我的情況的字符串,futher我將它與INT進行比較。

+0

我已經添加了詳細信息,但它們在我的問題範圍內的重要性不高。問題是,如何將數學結果(字符串+數學結果)連接到字典中。我開始認爲awk有這個問題。 – 2012-08-01 18:31:05

回答

1

串聯工作正常。這不是問題。

問題是您打印時正在計算字典值的int()。由於該值是一個字符串,所以結果被截斷。如果您需要使用int(),請在執行計算時進行,而不要在打印時進行。順便說一下,如果您提供了一些示例數據,那麼測試您的代碼並提供答案會容易得多。這一點尤其重要,因爲它有時候就是這樣,因爲問題出現在一個不是預期的地方。

+0

謝謝丹尼斯。我現在感到很蠢。事實上,我完全忘了printf部分,並沒有檢查它。 – 2012-08-02 10:07:54