次のコードを修正する必要があります。このコードは、特定のノードで使用可能なコアの数を決定するように設計されています。
ステップ1:コア数を取得します。
TC=$(grep -c process /proc/cpuinfo)
ステップ2:小数点を無視した稼働時間
LA=$(uptime | cut -d ' ' -f 13 | head -c 1)
ステップ3:実行できるプロセス数を取得$LA
するには減算します。$TC
procs=$(expr $TC - $LA)
私の問題は2段階です。と入力するとuptime | cut -d ' ' -f 13 | head -c 1
が表示されますa
。それはどういう意味ですか?ステップ2にエラーがありますか?
簡単に入力すると、次のようなuptime
結果が出るという点を追加します。
23:17:01 up 38 days, 38 min, 8 users, load average: 0.00, 0.00, 0.00
ベストアンサー1
の出力には、uptime
可変数の空白を含む複数のフィールドが含まれます。 cut
おもてなしすべてスペースはフィールド区切り文字として機能するため、これらの値の一部を変更するとcut
まったく異なる数値が得られます。
たとえば、ユーザー数は空白で埋められます。 10個未満の場合は空白が2個、10個以上の場合は空白が1個です。
$ echo ' 23:17:01 up 38 days, 38 min, 8 users, load average: 0.00, 0.00, 0.00'|cut -d ' ' -f13
average:
$ echo ' 23:17:01 up 38 days, 38 min, 10 users, load average: 0.00, 0.00, 0.00'|cut -d ' ' -f13
0.00,
代わりに を使用すると、awk
各フィールド間に可変スペースを許可し、行の先頭のスペースは無視します。
$ echo ' 23:17:01 up 38 days, 38 min, 8 users, load average: 0.00, 0.00, 0.00' | awk '{print $11}'
ただし、たとえば、「単語」自体の数が変わると、この問題はまだ壊れる可能性があります。稼働時間自体が数日、数分以上の場合:
14:51:24 up 4 min, 1 user, load average: 0.17, 0.16, 0.07
14:52:09 up 6 days, 21:58, 11 users, load average: 0.79, 0.84, 0.82
したがって、行の他の句読点(カンマやコロン)も変更される可能性があり、目的の数字を見つけるのに役立ちません。
grep -o ...
次の単語だけを抽出して、load average:
その中から正しい単語を抽出できます。ただし、オペレーティングシステムにこれらのファイルがある場合は、uptime
出力解析を完全に停止し、代わりにそのファイルからロード平均を抽出する方がはるかに簡単です。/proc/loadavg
$ cat /proc/loadavg
1.01 0.91 0.85 1/793 24545
小数点を無視して最初の数字だけを希望する場合は、単一を使用できますcut
。
$ cut -d. -f1 /proc/loadavg
1