String

如何用多個字元分割一行?

  • October 6, 2014

的輸出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:字元串拆分行,以便始終獲得兩種情況的負載平均數?

通常我只會使用${parameter#word} bash 參數擴展。它從一開始就擴展$parameter、刪除word(可以是模式)。

在您的情況下,類似於:

line=...
echo ${line#*load average: }

使其成為一個功能:

get_load() {
   w | head -n 1 | { read -r line; echo ${line#*load average: }; }
}

您還可以使用 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

引用自:https://unix.stackexchange.com/questions/159470