web-dev-qa-db-ja.com

シンプルなコマンドライン計算機

問題:

時々、コマンドライン環境で簡単な計算をする必要があります。例えば。次の出力が与えられます:

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

expr 236 - 192

入力する必要がある場所 スペース 演算子の前後にexpr 1+11+1をエコーするだけです。

25
Fabby

bcの使用に関連する冗長性の量を大幅に減らすことができます。

$ bc <<<"236-192"
44
$ bc <<<"1+1"
2

(シェルがそれをサポートしていると仮定します)。

関数として使用したい場合:

$ c() { printf "%s\n" "$*" | bc }
$ c 1+1
2

c定義をお気に入りのシェルスタートアップファイルに保存して、常に使用できるようにします。

36
Stephen Kitt

概要

いくつかのソリューションがリストされています(シェル、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

dcwas(歴史的に)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

awk

それらの本当に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
25
Isaac

このページのコメント を読んで、calcと呼ばれるUNIX/Linuxプログラムがまさにあなたが望んでいることをするのを見ます。 Debian/Ubuntu /派生物の場合:

Sudo apt-get install apcalc

その後、次のことができます。

calc 236-192

エイリアスを追加した場合alias c='calc'から.bashrcまたは/etc/bash.bashrcその後、次のようになります。

c 1+1

コマンドラインで。

21
number9

zsh内:

$ autoload zcalc # best in  ~/.zshrc
$ zcalc
1> 1+1
2
2> ^D
$ zcalc 5+5
1> 10
2>
15

units プログラムは、計算機として使用することを目的としていませんが、実際には計算機としてはかなりうまく機能します。

$ units "236-192"
    Definition: 44
$ 

If式にスペースがある場合、式は引用符で保護する必要があります。
指数および括弧の深いネストをサポートしています

9
CSM

私がzshで行うことは次のとおりです。

$ <<< $(( 236 - 192 ))
44

Bashでは、猫について明示的に言及する必要があります。

$ cat <<< $(( 236 - 192 ))
44

結果に小数桁を含めたい場合(bashではなくzshで機能)、基数ポイントをいずれかのオペランドに追加します

$ <<< $(( 236 / 128 )) 
1
$ <<< $(( 236. / 128 ))
1.84375
6
JoL

個人的には、私は libqalculateQalculate のコマンドラインバージョン)が好きです。

$ 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'のように設定します。

6
Sparhawk

以前の返信へのコメントで述べたように、標準のシェル(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

6
Max

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
>>>
4
Michael Hearn

concalc を試しましたか?

説明:コンソール電卓concalcは、Linuxコンソール用の電卓です。これは、単純なコンソールプログラムにパックされたextcalcのパーサーアルゴリズムです。シェルで電卓が必要な場合に使用できます。 concalcは、Cのようなプログラミング言語で書かれたスクリプトを実行することもできます。

$ concalc 1+1
2
$ concalc sqrt2
1.41421356237309505

インストール:

Sudo apt-get install concalc
3
Jan M.

dc -e '236 192-p'

...もちろん、もし dc に慣れておらず、2つの数値を減算する以上のことが必要な場合は、dc(そしておそらく [〜#〜] rpn [〜#〜] 一般的に)より慣れ親しんだ方法で保存するよりも。

2
Aaron Thomas

他の素晴らしい答えが投稿される前に、スクリプトを作成してしまいました/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+12! :-)

注1:cを使用したのは、そのコマンドが、見つかるどのUNIXシステムにも存在しないためです。それをcコンパイラーにエイリアスした場合は、短く、使用しないものを使用してください。
注2:ソース

2
Fabby

あなたがgradleをインストールしているなら、あなたはグルーヴィーです...

Groovyが正しくパスされている場合は、以下を使用できるはずです。

groovy -e "println 1+1"

これは他のすべての例では少し冗長に見えるかもしれませんが、次のようになります。

  • groovyは強力な言語です
  • おそらく利用可能な最高のライブラリサポート
  • 強力でシンプルな数学関数(任意精度の数学と同様)
  • 出力にリダイレクト可能なstdoutを使用しているため、驚くほど柔軟です(バッククォートなどのあるバッチファイル内で使用するのに最適です)。

Javaがインストールされていない場合、おそらくgroovyとJavaをインストールする価値はありません。groovyがすでに利用可能な場合は、これは単なる選択肢です。

2
Bill K

内部で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(\!*))"'
1
Krishna

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
>>> 
_

それでおしまい。幸せなコーディング!

1
AHJeebon

bcまたはqalc


自動的にbcを常に2桁に丸めるには、次のようにします(-lで実行すると、日常の作業では扱いにくくなります)。

~/.bashrcを編集:

alias bc="BC_ENV_ARGS=<(echo "scale=2") \bc"

新しいシェルを開き、そこでbcを実行します。

0
sjas