awk printf文字列を10進数に変換

awk printf文字列を10進数に変換

仕事:

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-numericgawkオプションを使用することです。

--use -lc-番号

これは、gawkが入力データを解析するときにロケールの10進文字を使用するように強制します。 POSIX 標準ではこの動作を要求し、gawk は --posix が適用されるときにそうしますが、デフォルトはピリオドが小数点ではなくロケールでもレガシー動作に従い、ピリオドを小数点として使用することです。性格。このオプションは、--posixオプションの完全な厳密さなしにデフォルトの動作をオーバーライドします。

あなたの場合、次のコマンドが機能します。

top -b -n 1 | awk --use-lc-numeric '/load average/ { printf "%f\n", $10}'

おすすめ記事