BC - 最後に「\\ n」がなく、前に0がありますか?

BC - 最後に「\\ n」がなく、前に0がありますか?

たとえば、次のような出力がありますbc

入力する:

echo "scale=10; BLA-BLA-HERE-NOT-IMPORTANT" | bc

出力:

.3708446283953709207058828124021300754352578903651372655882743141882\
77124645102027246581819139527644919407424570060822470537797066353573\
96635.8038454068 days

2つの質問:

  • 出力を「0.3708...」などの値に丸めることはできますか?
  • 最後に "\n" -s を削除できますか?

.NETで最大幅オプションが見つかりませんbc

答え1

GNU実装を使用すると、バックスラッシュ+改行機能を無効または拡張するbc環境変数を設定できます。BC_LINE_LENGTH最新バージョンでは、次のようにゼロ値を使用して無効にできます。

BC_LINE_LENGTH=0 bc <<<"2^4096"

以前のバージョンには「0オフ」機能がなく、ユーザーに影響を与えないように値を十分に大きい値に設定する必要がありました。

BC_LINE_LENGTH=10000 bc <<<"2^4096"

bcをたくさん使っていて、改行が好きではない場合は、シェルに設定する良い環境変数のように見えます。を使用している場合は、次の項目をbash入力してください.bashrc

export BC_LINE_LENGTH=0

答え2

次のコードを試してみてください。

echo "scale = 4;  3.5678/3" | bc | tr '\n' ' '

scaleに設定すると、bc丸め操作が実行されます。除算部分を任意の命令に置き換えることができます。出力はbc再びにパイプされ、tr改行文字(\n)を空白に変換します。上記のコマンドでは、次のような出力を取得します。

1.1892 user@localhost:~/codes$

答え3

$ OUT=$(bc <<< "2 ^ 256")
$ echo "$OUT"
11579208923731619542357098500868790785326998466564056403945758400791\
3129639936

$ OUT=${OUT//$'\\\n'/}
$ echo "$OUT"
115792089237316195423570985008687907853269984665640564039457584007913129639936

答え4

だから、自分で答えることもできますが、すべてを合わせた結果は次のようになります。

BC_LINE_LENGTH=10000 bc -l <<< "scale=200;1/3" | tr "\n" " "

たとえば、エネルギー消費量の計算

BC_LINE_LENGTH=10000 bc -l <<< "scale=2;`cat /sys/class/power_supply/BAT1/energy_now`/1000000"

関連情報