file1
100
内容として含め、をfile2
含めます200
。ターミナルでこれら2つの数字についてどのように計算できますか?私がこの2つの数字を分けたいとしましょう。私の方法はですが、echo $(cat file1)/$(cat file2)
印刷されます100/200
。分割された値を出力として取得したいと思います。
私の元の意図は、端末で自分のコンピュータのバッテリー比を調べることでした。以下には、という/sys/class/power_suply/BAT1
2つのファイルがあります。現在のバッテリ充電率を得るには、次の値を取得する必要があります。energy_now
energy_full
100 * energy_now / energy_full
答え1
猫の皮をむく方法はいくつかあります。シェルのバージョンに応じて「算術拡張」を実行できます(参考資料を参照man bash
)。
> echo $(($(cat file1)/$(cat file2)))
0
bash
0は整数演算しか実行できないため、満足できませんが正しい結果です。ファイルを反転すると、結果がはるかに明確になります。
> echo $(($(cat file2)/$(cat file1)))
2
システムにbc
(man bc
-Arbitrary Precision Calculator Language)がインストールされている場合は、以下を試してください。
> echo "scale=2; $(cat file1)/$(cat file2)" | bc
.50
さらに、目的の結果を簡単に生成できるテキスト処理および/またはスクリプト言語(awk
、、perl
など)がたくさんあります。python
答え2
これを行う特別なツールがあります。calc
する
$ sudo apt install calc
$ man calc
すべてのコマンドラインまたはスクリプト内の計算要件が解決されます。
bashをシェルとして使用する場合は、次のものを使用できます。生の算術。しかし、これは単なる整数です。小数点が必要な場合 - calc
。
答え3
任意の精度計算機を使用するには、dc
まず2つの数字を電卓スタックに入れ、小数点以下の桁数を2に設定し(つまり、計算結果を小数点数の2つに設定し)、2つの数字の除算を計算してから結果を印刷します。
{ cat file1 file2; echo '2k/p'; } | dc
dc
使用する電卓です逆ポーランド表記。上記のコマンドでは、合計は両方のファイルの出力からdc
提供されます100
。最初のコマンドは、スタックから一番上の数字(2)をポップし、それを使用してスケールを設定することです。次のコマンドは、スタックから上位2つの数字を取り出して分割することです。次に結果をスタックに戻します。このコマンドは、スタックの最上位数字(除算結果)を印刷します。200
2
echo
k
/
p