
ポイント値があります。
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
2400000
これをシェル変数に割り当てます。
CPU_FREQ=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)
bashを使用してシェルスクリプトで科学的な形式で表示したいと思います。さらに、それをプログラムのパラメータとして使用する必要があります。これが私が望むものです:
echo $CPU_FREQ
2.4+1e9
オンラインにはいくつかの人気のあるものがありますが、私は通常C/C++/Objective Cを使って作業しているので、これを修正する方法は明確ではありません。たとえば、次を参照してください。bashは科学的表記法で積分を表示します。そして科学的表記法bashスクリプトの削除。
積分を科学的表記法に変換する方法はありますか?
それとも科学的表記法で数値を表示するには?
答え1
これは簡単なはずです。
printf "%g" $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)
またはPerlを使用してください。
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq | perl -e 'printf("%g\n", <>)'
要求された形式は少し奇妙に見えますが、これら2つの例では科学的な表記を使用して数字を印刷します。
答え2
実際に@Janが述べたように、%eでprintfを使用できます。 @Willは%gオプションに言及しましたが、これは必ずしも科学的な表記ではありません(下記参照)。
これはあなたがすでに知っているCのprintfに基づいています。
CPU_FREQ=$(printf "%e" $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq))
printf コマンドは次のように動作します。
var=1
printf "print a float variable %f, or an integer literal. %d" $var 2
%g、%e、%G、または %E を使用できます。オプションの追加のリテラル整数パラメーターa、bも使用できます(例:%a.bf)。
つまり、オプションのパラメータaは最小幅サイズです(出力が変数として渡される場合、このパラメータは無視されます)。
%.be は正確に小数点 b 桁を使用して印刷し、必要に応じてパディングをゼロに丸めます。 %.bg は次のゼロを無視し、b 個の有効数字で結果を出力します。 (2つの%fと%eのうち短いと思うかもしれませんが、後ろにゼロがないことにもう一度注目する価値があります。)
例:
R=10000001
printf "%e\n" $R
1.000000e+07
printf "%g\n" $R
1e+07
R=1.0000001
printf "%e\n" $R
1.000000e+00
printf "%g\n" $R
1
R=1000000.1
printf "%e\n" $R
1.000000e+06
printf "%g\n" $R
1e+06
R=.10000001
printf "%e\n" $R
1.000000e-01
printf "%g\n" $R
0.1
(%Gと%Eは%gと%eと同じですが、大文字で印刷されます。これはEになるeに対してのみ機能します。)