
的輸出w | head -1
可以為我的機器提供 2 個不同的結果:
16:34:42 up 32 days, 3:02, 1 user, load average: 0.14, 0.11, 0.07
14:10:55 up 32 days, 39 min, 1 user, load average: 0.07, 0.13, 0.09
我需要獲得負載平均數(例如0.07, 0.13, 0.09
)。如何按load average:
字串拆分行,以便始終可以獲得兩種情況的負載平均數?
答案1
您也可以使用 awk:
$ w | head -1 | awk '{print $10,$11,$12}'
0.80, 0.84, 0.93
或者,如果欄位數量可變,請使用:
$ w | head -1 | awk '{print $(NF-2),$(NF-1),$NF}'
0.81, 0.82, 0.91
或者,更優雅(謝謝@Letitzia):
$ w | head -1 | awk -F "load average: " '{print $2}'
塞德:
$ w | head -1 | sed 's/.*load average: *//'
珀爾:
$ w | head -1 | perl -pe 's/.*load average: *//'
或者
$ w | head -1 | perl -lne '/.*load average: *(.*)/ && print $1'
您實際上可以colrm
在此處使用,但請注意,它刪除了定義為“一行中的單個字元”的“列”。因此,雖然它適用於您提供的範例(因為有額外的空間),但如果列數進一步變化,它就不會起作用。此處,刪除第 1 至 51 列
$ w | head -1 | colrm 1 51
答案2
通常我只會使用${parameter#word}
bash參數擴展。它從一開始就擴展$parameter
、刪除word
(可以是一個模式)。
在你的情況下,類似:
line=...
echo ${line#*load average: }
使其成為一個函數:
get_load() {
w | head -n 1 | { read -r line; echo ${line#*load average: }; }
}
答案3
如果你只想要最後一個數字,你可以使用 grep:
$ w | grep -Po 'load average: \K.*'
0.07, 0.13, 0.09
答案4
其他perl
:
$ w | head -1 | perl -nle 'print +(split /load average:/)[-1]'
0.42, 0.49, 0.63