時々、コマンドライン環境で簡単な計算をする必要があります。例えば。次の出力が与えられます:
Disk /dev/sdb: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 106MB 105MB fat32 hidden, diag
2 106MB 64.1GB 64.0GB ext4
3 64.1GB 192GB 128GB ext4
5 236GB 256GB 20.0GB linux-swap(v1)
コマンドラインパーティション3と5の間の未割り当て領域のサイズを計算する簡単な方法は何ですか?
bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
236-192
44
quit
どこ 大胆な 上記は、単純な236-192
を実行するために入力する必要があるすべてのものですbc 1+1
echos File 1+1 is unavailable.
expr 236 - 192
入力する必要がある場所 スペース 演算子の前後にexpr 1+1
が1+1
をエコーするだけです。
bc
の使用に関連する冗長性の量を大幅に減らすことができます。
$ bc <<<"236-192"
44
$ bc <<<"1+1"
2
(シェルがそれをサポートしていると仮定します)。
関数として使用したい場合:
$ c() { printf "%s\n" "$*" | bc }
$ c 1+1
2
c
定義をお気に入りのシェルスタートアップファイルに保存して、常に使用できるようにします。
いくつかのソリューションがリストされています(シェル、awk、dc、Perl、pythonなど)。
関数は任意のオプションで定義できます(gawkが最も柔軟に使用できるようです)
c () { local in="$(echo " $*" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
gawk -M -v PREC=201 -M 'BEGIN {printf("%.60g\n",'"${in-0}"')}' < /dev/null
}
そしてそれを次のように使用します:
$ c 236- 192
44
CLIのsimplest calcはCLI(シェル)自体です(IFS
がデフォルトの場合):
$ echo $(( 22 + 333 ))
355
スペースは省略できます:
$ echo $((22*333))
7326
そのまま POSIXの一部ほぼすべてのシェルにあります。また、C言語の数学機能のmostが含まれています(zshの優先順位が異なる場合を除き、C_PRECEDENCESを設定して互換性のある値に復元します)。
$ echo $((22*333^2))
7324
そしてsomeシェルはC言語の数学構文のほとんど(コンマを含む)を持っています:
$ echo $((a=22,b=333,c=a*b,c))
7326
しかし、それは整数演算のみです(通常は2未満です)63 現在のOSでは)一部のシェル:
$ echo $((1234/3))
411
$ zsh -c 'echo $((2**63))'
-9223372036854775808
一部のシェルは浮動小数点演算を実行できます:
$ ksh -c 'echo $((1234/3.0))'
411.333333333333333
$ ksh -c 'echo $((12345678901234567890123/3.0))'
4.11522630041152263e+21
Zshを避けます(zcalcにも同様の問題があります)。
$ zsh -c 'echo $((12345678901234567890123 + 1))'
zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1
-1363962815083169259
expr
は避けることをお勧めします。時々奇妙なエスケープが必要です。
$ expr 22 \* 333
7326
次のレベルは( POSIXも )bc
(RPNの従兄弟dc
)です
$ echo '22*333' | bc
7326
$ echo '22 333 * p' | dc
7326
dc
was(歴史的に)bcおよび 2017年にPOSIXから除外されました の実装に使用されました。
シェルがそれをサポートしている場合はより短く:
$ bc <<<'22*333'
7326
あるいは:
$ <<<'22*333' bc
7326
どちらも、いくつかの内部数学関数を備えた任意精度の計算機です。
$ bc <<<2^200
1606938044258990275541962092341162602522202993782792835301376
$ echo 's(3.1415/2)' | bc -l # sine function
.99999999892691403749
それらの本当にbasic計算ツールの後、他の言語に上る必要があります
$ awk "BEGIN {print (22*33)/7}"
103.714
$ Perl -E "say 22*33/7"
103.714285714286
$ python3 -c "print(22*33/7)"
103.71428571428571
$ php -r 'echo 22*33/7,"\n";'
103.71428571429
上記のオプションのいずれかの機能を定義できます。
c ()
{
local in="$(echo " $*" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
gawk -M -v PREC=201 -M 'BEGIN {printf("%.60g\n",'"${in-0}"')}' < /dev/null
}
そして使用:
$ c 22* 33 /7 # spaces or not, it doesn't matter.
103.714285714285714285714285714285714285714285714285714285714
このページのコメント を読んで、calc
と呼ばれるUNIX/Linuxプログラムがまさにあなたが望んでいることをするのを見ます。 Debian/Ubuntu /派生物の場合:
Sudo apt-get install apcalc
その後、次のことができます。
calc 236-192
エイリアスを追加した場合alias c='calc'
から.bashrc
または/etc/bash.bashrc
その後、次のようになります。
c 1+1
コマンドラインで。
zsh
内:
$ autoload zcalc # best in ~/.zshrc
$ zcalc
1> 1+1
2
2> ^D
$ zcalc 5+5
1> 10
2>
units
プログラムは、計算機として使用することを目的としていませんが、実際には計算機としてはかなりうまく機能します。
$ units "236-192"
Definition: 44
$
If式にスペースがある場合、式は引用符で保護する必要があります。
指数および括弧の深いネストをサポートしています
私がzshで行うことは次のとおりです。
$ <<< $(( 236 - 192 ))
44
Bashでは、猫について明示的に言及する必要があります。
$ cat <<< $(( 236 - 192 ))
44
結果に小数桁を含めたい場合(bashではなくzshで機能)、基数ポイントをいずれかのオペランドに追加します
$ <<< $(( 236 / 128 ))
1
$ <<< $(( 236. / 128 ))
1.84375
個人的には、私は libqalculate ( Qalculate のコマンドラインバージョン)が好きです。
$ qalc
> 236-192
236 - 192 = 44
インターフェースは確かにシンプルですが、(lib)qalculateは強力で本格的な計算機です。例えば.
> fibonacci(133) to hex
fibonacci(133) = approx. 0x90540BE2616C26F81F876B9
> 100!
factorial(100) = approx. 9.3326215E157
> sin(pi)
sin(pi * radian) = 0
また、タブ補完、必要に応じて括弧を開いたり閉じたり、クエリの解釈を出力するなど、便利なことも行います。
> 18-2)/4
(18 - 2) / 4 = 4
終了するには、単に Ctrl+d。
さらに高速にアクセスするには、alias ca='qalc'
のように設定します。
以前の返信へのコメントで述べたように、標準のシェル(ba)shでは、$((...))
内の算術式を評価できます。これがPOSIX標準の一部であるかどうかをダブルチェックすることはできませんでしたが、CygwinとMingw32シェルでも動作することを確認しました。
結果を見るには、実際にecho $((...))
と入力する必要があります。これにより、一部の文字がbc
(のインタラクティブな使用)より多くなります。ただし、スクリプトで結果をuseするには、これはおそらくbc
ソリューション(たとえば、`echo ...|bc`
)。
冗長性に関しては、bc
コマンドでオプション-q
を使用できます。これにより、 "normal GNU bc
welcome"。
最後に、わずかに境界線の注意として、bc
は単なる計算機ではなく、本格的なプログラミング言語(ユーザー定義関数、while&forループなどを含む)であることに注意してください。外部プログラムではなく、このような単純な計算には組み込みの算術機能を使用することを推奨するもう1つの事実。とはいえ、特定のパーティション番号のデータを抽出し、「M」、「G」サフィックスを処理すると、元の質問で求められていたように、bc
ではなく(g)awk
が必要になる場合があります。
出典: https://www.gnu.org/software/bc/manual/html_mono/bc.htmlhttps://www.gnu.org/software/gawk/manual/ html_node/Getting-Started.html
Pythonは別のタブで開きますか?
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 3+3
6
>>>
concalc を試しましたか?
説明:コンソール電卓concalcは、Linuxコンソール用の電卓です。これは、単純なコンソールプログラムにパックされたextcalcのパーサーアルゴリズムです。シェルで電卓が必要な場合に使用できます。 concalcは、Cのようなプログラミング言語で書かれたスクリプトを実行することもできます。
$ concalc 1+1
2
$ concalc sqrt2
1.41421356237309505
インストール:
Sudo apt-get install concalc
dc -e '236 192-p'
...もちろん、もし dc
に慣れておらず、2つの数値を減算する以上のことが必要な場合は、dc
(そしておそらく [〜#〜] rpn [〜#〜] 一般的に)より慣れ親しんだ方法で保存するよりも。
他の素晴らしい答えが投稿される前に、スクリプトを作成してしまいました/usr/local/bin/c
含む:
#!/bin/sh
IFS=' ' # to be on the safe side, some shells fail to reset IFS.
if [ "$#" -eq 0 ]; then
echo "$(basename "$0"): a (very) simple calculator."
echo "type $(basename "$0") expression to evaluate (uses bc internally)"
fi
printf '%s\n' "$*" | bc -l # safe for most shells
# we may use 'bc -l <<<"$*"` for ksh, bash, zsh
c 1+1
は2
! :-)注1:c
を使用したのは、そのコマンドが、見つかるどのUNIXシステムにも存在しないためです。それをcコンパイラーにエイリアスした場合は、短く、使用しないものを使用してください。
注2:ソース
あなたがgradleをインストールしているなら、あなたはグルーヴィーです...
Groovyが正しくパスされている場合は、以下を使用できるはずです。
groovy -e "println 1+1"
これは他のすべての例では少し冗長に見えるかもしれませんが、次のようになります。
Javaがインストールされていない場合、おそらくgroovyとJavaをインストールする価値はありません。groovyがすでに利用可能な場合は、これは単なる選択肢です。
内部でPerl
/python
を使用します。
利点?
すべての数学演算を最大限に活用できます
❯ calc 'log(e)'
1.0
❯ calc 'pi*2'
6.283185307179586
❯ calc 'pi**2'
9.869604401089358
❯ calc 'pi**pi'
36.4621596072079
文字列入力に固執する場合は、シェルのグロブ拡張について心配する必要はありません
zsh
またはbash
の場合、次のような関数があります。
function calc {
python3 -c "from math import *; print(eval($*))"
}
tcsh
の場合、次のようなエイリアス
alias Calc 'python3 -c "from math import *; print(eval(\!*))"'
pythonがインストールされている場合は、コマンドラインから多くの数学演算を実行できます。以下にいくつかの例を提供しようとしました。
私は_python3
_を使用しましたが、python
を使用できます。 python
と_python3
_の違いは、分割(小数)演算が発生したときに発生します。この問題を回避するには、以下を参照してくださいpython vs python3。
注:最新のすべてのLinuxディストリビューションには、デフォルトでPython 2.7およびPython 3.5がデフォルトで含まれています。必要に応じて、python = ここをクリック 。
加算、減算、乗算、除算:
_$ python3 <<< "print(12+3)"
15
$ python3 <<< "print(12-3)"
9
$ python3 <<< "print(12*3)"
36
$ python3 <<< "print(12/3)"
4
_
係数-除算の残り:
_$ python3 <<< "print(14%3)"
2
_
フロア分割:
_$ python3 <<< "print(14//3)"
4
_
指数-xのy乗(x ^ y):
_$ python3 <<< "print(3**2)"
9
_
平方根(例:√4= 2):
_$ python3 <<< "print(4**0.5)"
2
_
より科学的な部分、インポートmathライブラリが必要になります。例:
X = log(x)の自然対数:
_$ python3 <<< "import math; print(math.log(4))"
1.386294361119890e6
_
Xの10を底とする対数= log10(x):
_$ python3 <<< "import math; print(math.log10(10))"
1.0
_
階乗(例:3!= 3.2.1 = 6):
_$ python3 <<< "import math; print(math.factorial(3))"
6
_
三角法-sin(x)
、cos(x)
、tan(x)
:
_$ python3 <<< "import math; print(math.sin(90))"
0.8939966636005579
_
フォア数学関連の関数 ここをチェック 。
python
Vs _python3
_:
-除算の場合:(floatを使用):
_$ python <<< "print(10.0/3)"
3.33333333333
_
-の代わりに
_$ python <<< "print(10/3)"
3
_
また、直接端末を使用することもできます:
_$ python3
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+3
4
>>> import math
>>> math.log10(4)
0.6020599913279624
>>> math.sqrt(4)
2.0
>>>
_
それでおしまい。幸せなコーディング!
bc
またはqalc
。
自動的にbc
を常に2桁に丸めるには、次のようにします(-l
で実行すると、日常の作業では扱いにくくなります)。
~/.bashrc
を編集:
alias bc="BC_ENV_ARGS=<(echo "scale=2") \bc"
新しいシェルを開き、そこでbc
を実行します。