2013-02-14 55 views
1

我想使用top作爲RAM總量的百分比吐出RAM使用率。劇本我至今是bash awk整數

top -l 1 | 
awk '/PhysMem/ { 
    print "RAM\nwired:" $2/40.95 "% active:" $4/40.95 "% inactive:" $6/40.95 "% free:" $10/40.95 "%" 
}' 

我有4GB的RAM,因此由40.95分,因此該腳本吐出的東西,看起來像:

RAM 
wired:16.1172% active:46.2759% inactive:8.79121% free:28.8156% 

我只是想讓它顯示的百分比,以1位過去的小數,我不知道如何做到這一點。我看着使用bc,但我總是得到一個非法的聲明錯誤。任何想法如何將它舍入awk中的第一個小數位?

+2

爲什麼不使用'free'代替?它比頂層的輸出更容易解析/操作。 – 2013-02-14 18:34:29

+0

即時運行osx,所以沒有'free'命令。必須使用頂部# – Hat 2013-02-14 18:43:30

+1

你可能會發現這個有趣的http://apple.stackexchange.com/questions/4286/is-there-a-mac-os-x-terminal-version-of-the-free- command-in-linux-systems – sotapme 2013-02-15 00:06:34

回答

5

有幾個方法可以做到這一點與AWK:

... | awk '{ print $2/40.95 }' OFMT="%3.1f" 

... | awk '{ printf("%3.1f\n", $2/40.95)}' 

每個使用的輸出格式%3.1f處理四捨五入。所以你需要做的就是把你的awk調用加上參數OFMT="%3.1f"。 (或者你可能更喜歡%0.1f的格式3只給出最小寬度;典型的格式字符串規則適用。)

+0

請注意,根據您的具體情況,您可能需要'CONVFMT'而不是'OFMT' - 更多細節[here](http://stackoverflow.com/a/12889541/812102)。 – 2014-10-30 10:45:16