3

CPU負荷平均のアイデアに、私はスクリプトで使用uptimeしていkshます:

uptime | awk '{print $11}' | sed '$s/.$//' | read CPU

後で変数を使用しますCPU

その部分は、最後の 5 分間$11の部分を分離することです。しかし、今日、これが機能していないことに気付きました。具体的には、最後の 5 分間の部分が で返されました。関数はより少ないパラメータを返しています。これは、マシンが最近再起動されたため、再起動からの日数と分数ではなく分数が表示されるためです。$9uptime

アップタイムの最後の 5 分間だけを一貫して取得する方法はありますか?

4

6 に答える 6

3

「Load Average」の前のテキストを分割してからawk、残りの部分で使用してみてください。

uptime | sed 's/.*load average: //' | awk -F\, '{print $2}'
于 2012-07-31T08:10:37.867 に答える
1

9番目または11番目よりも、最後から2番目のフィールドを読み取る方が簡単な場合があります。

uptime | awk '{print $(NF-1)}' FS=,
于 2012-07-31T22:18:09.240 に答える
0

この小さなシェル関数は、bash または ksh(93) で動作するはずです。

    function loadavg {
        typeset minutes=$1 t1=$(uptime)
        echo ${t1#*load average: } | (
            IFS=', ' && read L1 L5 L15
            case $minutes in
            (1)  echo $L1;;
            (5)  echo $L5;;
            (15) echo $L15;;
            ("") echo $L1 $L5 $L15;;
            (*)  echo "usage: loadavg [ 1 | 5 | 15 ]" 1>& 2
            esac                
        )
    }

説明:

このコードは、IFS を使用して、"load average: " の後の文字列を 3 つのフィールドに分割します。'typeset' とサブシェルは、関数変数を他のシェル変数から分離します。

以下は結果を単純化し、元の質問への回答を返すだけです。

function load5 {
    typeset t1=$(uptime)
    echo ${t1#*load average: } | (
        IFS=', ' && read L1 L5 L15
        echo $L5            
    )
}
于 2012-07-31T16:36:29.580 に答える
0

そのため、Linux と Mac OS X の両方で機能するものを作成するのに苦労しました。

uptime | sed 's/.*load average[s]*://' | awk '{print $3}'

これが誰かに役立つことを願っています。

于 2015-08-24T21:11:30.817 に答える
0

これにより、5分ごとの負荷平均を取得するために使用している最良の結果が得られる可能性があります。

$ アップタイム | awk '{ print $11 }'| tr -d ','

于 2012-08-15T06:47:47.563 に答える