仕事:
stdoutは、ロード平均を上から小数点形式で出力します(例:0.23)。
詳細:
このスクリプトをChefのチェックで解析し、結果がどれよりも大きいか小さいかを確認する必要があります。たとえば、次のようになります。
describe command("top -b -n 1 | awk '/load average/ { sub(/,/,\".\",$10); printf \"%f\n\",$10}'") do
its("stdout") { should eq 0.00 }
end
この例では "" を返します。
ところで今考えてみると、中にあるファイルとの比較になりました。/proc/loadavg
進展
次のリソースを使用してください。平均負荷を得るにはtopを使用してください。
このコマンドを使用すると、出力はうまく表現されますが、出力は文字列なので計算できません。
martin@martinv-pc:~$ top -b -n 1 | awk '/load average/ { printf "%s\n", $10}'
0,63,
ただし、printfを小数/浮動小数点に変更しようとするとエラーが発生します。
martin@martinv-pc:~$ top -b -n 1 | awk '/load average/ { printf "%f\n", $10}'
0.000000
martin@martinv-pc:~$ top -b -n 1 | awk '/load average/ { printf "%d\n", $10}'
0
音が聞こえません。切り取ってみてください。悪い考え- 動作しない:
martin@martinv-pc:~$ top -b -n 1 | awk '/load average/ { printf "%s\n", $10}'|cut -c1-4
0,15
martin@martinv-pc:~$ top -b -n 1 | awk '/load average/ { printf "%s\n", $10}'|$((cut -c1-4))
-4: command not found
もう一つの試み:
martin@martinv-pc:~$ top -b -n 1 | awk '/load average/ BEGIN { printf "%.f\n", $10};'
awk: line 1: syntax error at or near BEGIN
質問:
文字列値を10進数/浮動小数点/整数に変換するには?
ps -o user,rss
出力:
[vagrant@localhost ~]$ ps -o user,rss
USER RSS
vagrant 736
vagrant 1080
ベストアンサー1
~からgawk: カンマ区切り文字でフォーマットされた浮動小数点数の合計:
答えは--use-lc-numeric
gawkオプションを使用することです。
--use -lc-番号
これは、gawkが入力データを解析するときにロケールの10進文字を使用するように強制します。 POSIX 標準ではこの動作を要求し、gawk は --posix が適用されるときにそうしますが、デフォルトはピリオドが小数点ではなくロケールでもレガシー動作に従い、ピリオドを小数点として使用することです。性格。このオプションは、--posixオプションの完全な厳密さなしにデフォルトの動作をオーバーライドします。
あなたの場合、次のコマンドが機能します。
top -b -n 1 | awk --use-lc-numeric '/load average/ { printf "%f\n", $10}'