
の出力は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
それとももっとエレガントに(@レティチアありがとう):
$ w | head -1 | awk -F "load average: " '{print $2}'
Seder:
$ 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