2014-12-05 54 views
2

我有這是越來越使用的運行時間和AWK的平均負載,例如擊弦替換命令結果

LOAD_5M=$(uptime | awk -F'load averages:' '{ print $2}' | awk '{print $2}') 

然而,這包括一個簡單的bash腳本「」在平均負載

的端部

eg

0.51, 

所以我一直然後用字符串逗號替換像這樣:

LOAD_5M=${LOAD_5M/,/} 

我不是一個awk或bash wizzkid因此,雖然這給了我我想要的結果,我想知道如果有寫這個的簡潔的方式,或者通過:

  • 使用awk來獲得無逗號的平均負載,或
  • 剝單節鋰逗號ne

回答

2

你可以做到這一點在同一個awk命令:

uptime | awk -F 'load averages?: *' '{split($2, a, ",? "); print a[2]}' 
1.32 
+0

我注意到一些OS包含逗號每個平均和一些不這樣做,這不工作,如果它不在那裏,但如果我改變拆分「分裂($ 2,一,」,?「)'我認爲它看起來不錯。 – 3urdoch 2014-12-05 10:52:46

+0

是的,我在OSX上測試過,在這裏找到了逗號。否則是'分裂($ 2,a,「,?」)'會更好。 – anubhava 2014-12-05 10:54:17

1

5分鐘負載可在/proc/loadavg。你可以簡單地使用cut

cut -d' ' -f2 /proc/loadavg 

隨着awk可以發出:

awk '{print $2}' /proc/loadavg 

如果您沒有在Linux上工作的文件/proc/loadavg將不存在。在這種情況下,我會建議使用sed,像這樣:

uptime | sed 's/.*, \(.*\),.*,.*/\1/' 
+1

我喜歡這個,直到我在Mac上試過並得到'cut:/ proc/loadavg:沒有這樣的文件或目錄,所以認爲正常運行時間多一點。 – 3urdoch 2014-12-05 10:45:02

+0

同樣在這裏,我也試過它在Mac上,它沒有工作。也許它是Linux的絕招 – anubhava 2014-12-05 10:46:19

+1

@murdoch使用Linux的另一個原因。 ;) – hek2mgl 2014-12-05 23:23:38

0
uptime | awk -F'load average:' '{ print $2}' | awk -F, '{print $2}' 
0.38 

(我的正常運行時間,輸出具有「平均負載:」奇)

0

平均負載數字總是在「正常運行時間」的輸出,以便在最後3個字段:

IFS=' ,' read -a uptime_fields <<<"$(uptime)" 
LOAD_5M=${uptime_fields[@]: -2:1}