echo "20+5"
文字通りに使用すると、テキスト「20+5
」が生成されます。
25
この場合、数値の合計を取得するためにどのコマンドを使用できますか?
また、浮動小数点にbashを使用するだけの簡単な方法は何ですか?たとえば、:(をecho $((3224/3807.0))
出力し0
ます。
基本的なコマンドシェル(「コマンドライン」)自体を使用するか、コマンドラインから使用可能な言語を使用して回答を探しています。
echo "20+5"
文字通りに使用すると、テキスト「20+5
」が生成されます。
25
この場合、数値の合計を取得するためにどのコマンドを使用できますか?
また、浮動小数点にbashを使用するだけの簡単な方法は何ですか?たとえば、:(をecho $((3224/3807.0))
出力し0
ます。
基本的なコマンドシェル(「コマンドライン」)自体を使用するか、コマンドラインから使用可能な言語を使用して回答を探しています。
回答:
$ printf %.10f\\n "$((10**9 * 20/7))e-9" # many shells. Not mksh.
$ echo "$((20.0/7))" # (ksh93/zsh/yash, not bash)
$ awk "BEGIN {print (20+5)/2}"
$ zcalc
$ bc <<< 20+5/2
$ bc <<< "scale=4; (20+5)/2"
$ dc <<< "4 k 20 5 + 2 / p"
$ expr 20 + 5
$ calc 2 + 4
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
$ echo 20 5 2 / + p | dc
$ echo 4 k 20 5 2 / + p | dc
$ perl -E "say 20+5/2"
$ python -c "print(20+5/2)"
$ python -c "print(20+5/2.0)"
$ clisp -x "(+ 2 2)"
$ lua -e "print(20+5/2)"
$ php -r 'echo 20+5/2;'
$ ruby -e 'p 20+5/2'
$ ruby -e 'p 20+5/2.0'
$ guile -c '(display (+ 20 (/ 5 2)))'
$ guile -c '(display (+ 20 (/ 5 2.0)))'
$ slsh -e 'printf("%f",20+5/2)'
$ slsh -e 'printf("%f",20+5/2.0)'
$ tclsh <<< 'puts [expr 20+5/2]'
$ tclsh <<< 'puts [expr 20+5/2.0]'
$ sqlite3 <<< 'select 20+5/2;'
$ sqlite3 <<< 'select 20+5/2.0;'
$ echo 'select 1 + 1;' | sqlite3
$ psql -tAc 'select 1+1'
$ R -q -e 'print(sd(rnorm(1000)))'
$ r -e 'cat(pi^2, "\n")'
$ r -e 'print(sum(1:100))'
$ smjs
$ jspl
整数演算にはPOSIX算術展開を使用できますecho "$((...))"
。
$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22
かなりポータブル(ash dash yash bash ksh93 lksh zsh
):
floatを出力するprintf機能を使用すると、限られた範囲(10桁以内)であるにもかかわらず、ほとんどのシェルを拡張して浮動小数点演算を実行できます。
$ printf %.10f\\n "$((1000000000 * 20/7 ))e-9"
2.8571428570
ksh93
、yash
そしてzsh
ここでのサポート山車の操作を行います。
$ echo "$((1.2 / 3))"
0.4
ここにksh93
(直接)およびzsh
ライブラリmathfunc をロードするだけです:
$ echo "$((4*atan(1)))"
3.14159265358979324
(のような関数を取得zsh
するにはロードzmodload zsh/mathfunc
する必要がありますatan
)。
zshと対話的に:
$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17
(t)cshを使用(整数のみ):
% @ a=25 / 3; echo $a
8
内rc
シェルファミリー、akanga
算術拡張を有するものです。
; echo $:25/3
8
bc
(インタラクティブモードについては以下を参照)、マニュアルはこちら
記憶法:best calculator(ただし、これb
は実際にはbasicの場合です)。
$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000
(任意精度の数値をサポート)
bcインタラクティブモード:
$ 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'.
5+5
10
2.2+3.3
5.5
Rushのソリューションexpr
(インタラクティブモードなし):
$ expr 20 + 5
25
$ expr 20 + 5 / 2
22
ジョシュアのソリューション:(awk
インタラクティブモードなし):
$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333
Arcegeのソリューションdc
(インタラクティブモード:)dc
:
逆ポーランド記法で動作するため、これはさらに楽しいです。
$ echo 20 5 2 / + p | dc
22
$ echo 4 k 20 5 2 / + p | dc
22.5000
ただし、逆ポーランド記法を頻繁に使用しない限り、実用的ではありません。
注dc
以前からbc
とbc
歴史のラッパーとして実装されていますdc
が、dc
POSIXによって標準化されませんでした
DQdimsのcalc
(必須sudo apt-get install apcalc)
:
$ calc 2 + 4
6
manatworkのソリューションnode
(インタラクティブモード:node
;出力関数は不要):
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5
Perl(インタラクティブモード:)perl -de 1
:
$ perl -E "say 20+5/2"
22.5
Python(インタラクティブモード:python
;出力関数は不要):
$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5
任意精度の数値もサポートします。
$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184
clisp
インストール済みの場合は、ポーランド語表記も使用できます。
$ clisp -x "(+ 2 2)"
マルコのソリューションlua
(インタラクティブモード:)lua
:
$ lua -e "print(20+5/2)"
22.5
PHP(インタラクティブモード:)php -a
:
$ php -r 'echo 20+5/2;'
22.5
Ruby(インタラクティブモード:irb
;出力関数は不要):
$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5
Guile(インタラクティブモード:)guile
:
$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5
S-Lang(インタラクティブモード:slsh
;出力関数は不要、;
ターミネーターのみ):
$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000
Tcl(インタラクティブモード:tclsh
;出力関数は不要ですが、必要expr
です):
$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5
Javascriptシェル:
$ smjs
js> 25/3
8.333333333333334
js>
$ jspl
JSC: 25/3
RP: 8.33333333333333
RJS: [object Number]
JSC:
Good bye...
$ node
> 25/3
8.333333333333334
>
SQLite(インタラクティブモード:)sqlite3
:
$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5
MySQLの:
mysql -BNe 'select 1+1'
PostgreSQL:
psql -tAc 'select 1+1
_mysqlとpostgresのオプションは「ascii art」イメージを停止します!
Rプレーンモード-1000の標準乱数を生成し、標準偏差を取得して印刷できます。
$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997
R使用littlerのスクリプトを-乗印刷パイをすることができます
$ r -e 'cat(pi^2, "\n")'
9.869604
$ r -e 'print(sum(1:100))'
[1] 5050
PARI / GP、数論、線形代数、その他多くのことのための広範なコンピューター代数システム
$ echo "prime(1000)"|gp -q
7919 // the 1000th prime
$ echo "factor(1000)" | gp -q
[2 3]
[5 3] // 2^3*5^3
$ echo "sum(x=1,5,x)" | gp -q
15 // 1+2+3+4+5
GNU Octave(高レベルのインタープリター言語、主に数値計算用)
複素数もサポートしています:
$ octave
>> 1.2 / 7
ans = 0.17143
>> sqrt(-1)
ans = 0 + 1i
科学および数値計算用の高性能言語およびインタープリター、ジュリア。
非対話型オプション:
$ julia -E '2.5+3.7'
6.2
whatis bc
-> An arbitrary precision calculator language
面白い!ありがとう!
dc
、逆ポーランド記法で動作するため、さらに楽しいです。echo 20 5 + p | dc
ただし、逆ポーランド記法を頻繁に使用しない限り、実用的ではありません。
## Command line calculator calc () { bc -l <<< "$@" }
math
私たちが話しているように、彼らは彼らの新しいビルトイン(またはそれが現在呼ばれているもの)に取り組んでいます。編集してください。それは私の答えではなく、コミュニティwikiです。
計算には多くの方法があります。単純な式の場合、bash
それ自体を使用できます。
echo $((20+5))
またはexpr
:
expr 20 + 5
そして複雑な場合には素晴らしいツールがありますbc
:
echo "20+5" | bc
ところで、bcは、根、対数、cos、sinなどの非常に複雑な式でも計算できます。
expr
受け入れられた回答にオプションを追加しました。受け入れて一元化するものを選択する必要がありました。
expr 20+5
。数字とプラスの間にスペースを入力して、機能させる必要がありますexpr 20 + 5
。それは重要です。
前述のソリューションは、非常に単純な計算には適していますが、非常にエラーが発生しやすくなります。例:
# without spaces expr 20+5 produces literally 20+5
expr 20+5
→ 20+5
# bc's result doesn't give the fractional part by default
bc <<< 9.0/2.0
→ 4
# expr does only integer
expr 9 / 2
→ 4
# same for POSIX arithmetic expansion
echo $((9/2))
→ 4
# bash arithmetic expansion chokes on floats
echo $((9.0/2.0))
→ bash: 9/2.0: syntax error: invalid arithmetic operator (error token is ".0")
# Most `expr` implementations also have problems with floats
expr 9.0 / 2.0
→ expr: non-integer argument
最後のような構文エラーは簡単に気づかれますが、フロート部分が破棄された整数の応答は簡単に気付かれず、間違った結果につながる可能性があります。
そのため、私はいつもLuaのようなスクリプト言語を使用しています。ただし、使い慣れたスクリプト言語を選択できます。例としてLuaを使用します。利点は
例:
lua -e "print(9/2)"
→ 4.5
lua -e "print(9 / 2)"
→ 4.5
lua -e "print(9.0/2)"
→ 4.5
lua -e "print (9 /2.)"
→ 4.5
lua -e "print(math.sqrt(9))"
→ 3
bc
の結果は整数ではなく、に丸められscale
ます。デフォルト値は0です。したがってbc <<< 'scale=4;9.0/2.0'
、小数部が必要な場合。
scale
使用する場合、追加することを覚えていbc
ますか?おそらくない。そして、恒久的に変更する方法があったとしても、デフォルトの設定でシステムを使用している場合は噛みつきます。
scale
、bc
数年前に初めて会ったときのことを覚えています。しかし、私は常に出力機能では、かどうかを忘れてしまっlua
ていますput
かputs
。;)
bc -l
単純bc
ではなく常に使用してくださいscale
。
まだ誰もawkについて言及していませんか?
POSIXシェル関数とawk数学パワーを使用して、この(1行の)関数を定義するだけです。
calc(){ awk "BEGIN { print $*}"; }
次に、calc 1+1
またはcalc 5/2
注:関数を常に使用可能にするには、〜/ .bashrc(または対応するシェルの起動ファイル)に追加します
もちろん、次の内容を持つ「calc」という名前の小さなスクリプト:
#!/bin/sh -
awk "BEGIN { print $* }"
動作する可能性もあります。
a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi
使用できますbc
。例えば、
$ echo "25 + 5" | bc
30
別の方法でbc <<< 25+5
も動作します。
または、1つの単純な計算以上のことを行いたい場合は、インタラクティブに:
$ 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'.
25 + 5
30
GNUの実装はbc
、stdinとstdoutの両方が端末に送られたときに、起動時にヘッダー/著作権情報を出力します。(GNU固有の)-q
オプションでそれを抑制することができます。詳細については、bcのマニュアルページを参照してください。
ctrl-d
終了しますか?
quit
c () { bc -l <<< "$@" }
c
すばやく簡単に使用できる関数を定義します。例えばc 3/2
、あなたに与えます1.50000000000000000000
。その方法を説明した上記のリンクは死んでいます。
以下を使用できますcalc
。
calc
他の引数を指定せずに入力すると、インタラクティブモードに入り、計算を続けることができます。exitと入力してこれを終了します。
C-style arbitrary precision calculator (version 2.12.3.3)
Calc is open software. For license details type: help copyright
[Type "exit" to exit, or "help" for help.]
; 2+4
6
; 3+5
8
; 3.4+5
8.4
; 2^4
16
; exit
または、式を引数として使用し、答えを提供して終了します
$calc 2 + 4
6
$
calc
に似てbc
いますが、デフォルトとして動作する方法が好きです
calc -e '2+4; 3+5; 3.4+5; 2^4
印刷物4本の出力ライン、または単にcalc -e 33+(3^3)
.. +1は、私は:)電卓のための「カルク」と呼ばれるものを使用してのアイデアが好き
-e
式が1つしかない場合はオプションが不要であることに気づきました...きちんと!
私はPythonを起動し、それを対話型の計算機として使用するのが好きです(しかし、再び、私はPythonプログラマーです)。
screen
Pythonを実行するだけで、常に1つのウィンドウがあります。
誰もそれについて言及していないので、厳密には計算機ではありませんが(これらの汎用スクリプト言語はすべてそうではありません)、言及したいと思いunits
ます。
$ units "1 + 1"
Definition: 2
$ units "1 lb" "kg"
* 0.45359237
/ 2.2046226
または、出力を減らすため$()
に、何かに割り当てるために使用する数字だけを取得できます。
$ units -t "1 + 1"
2
$ units -t "1 lb" "kg"
0.4539237
温度変換も行います
$ units -t "tempC(20)" "tempF"
68
さらに計算するために式で温度変換を取得するには、次のようにします。
$ units -t "~tempF(tempC(20))+1"
68.1
$> ghc -e '20 + 5'
25
it :: Integer
またghci
、それはインタラクティブモードのGlasgow-Haskellコンパイラ(ghc --interactive
で式を評価するのとは対照的に-e
)で、魅力的な「計算機」を作成します。
$>ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> pi
3.141592653589793
Prelude> ceiling pi
4
Prelude> compare 1 2
LT
ghc
Glasgow Haskell Compiler を意味していますか?
私はpython式を評価して結果を出力する小さなpythonスクリプトを使用します。
$ pc '[i ** 2 for i in range(10)]'
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
スクリプトは次のとおりです。
#!/usr/local/bin/python3
import sys
import traceback
from codeop import CommandCompiler
compile = CommandCompiler()
filename = "<input>"
source = ' '.join(sys.argv[1:]) + '\n'
try:
code = compile(source, filename)
except (OverflowError, SyntaxError, ValueError):
type, value, sys.last_traceback = sys.exc_info()
sys.last_type = type
sys.last_value = value
if filename and type is SyntaxError:
# Work hard to stuff the correct filename in the exception
try:
msg, (dummy_filename, lineno, offset, line) = value.args
except ValueError:
# Not the format we expect; leave it alone
pass
else:
# Stuff in the right filename
value = SyntaxError(msg, (filename, lineno, offset, line))
sys.last_value = value
lines = traceback.format_exception_only(type, value)
print(''.join(lines))
else:
if code:
exec(code)
else:
print('incomplete')
残念ながら、ほとんどのコードをどこから借りたのか覚えていないので、引用することはできません。
print(eval(' '.join(sys.argv[1:])))
同じことを行いますか?
gnuplot-対話型のプロットプログラム
上記のリンクに従うかgnuplot
、プロンプトから gnuplotインタープリターhelp
内に入力します。Gnuplotはデータをプロットするために生まれたプログラムですが、計算にも使用できます。関数を定義したり、組み込み関数を使用したりできるという利点があります。
echo "pr 20+5/2" | gnuplot # Lazy-note `pr` instead of print
22 # Integer calculation & result
echo "pr 20.+5/2" | gnuplot # Lazy-note `pr` instead of print
22.0 # Floating point result
echo "pr sin(2*pi/3.)" | gnuplot # Some functions ...
0.866025403784439
ROOTシステムは非常に効率的な方法で大量のデータを処理し、分析するために必要なすべての機能を持つオブジェクト指向のフレームワークのセットを提供しています...
Cインタープリター、CINTとして使用するか、他の多くのCインタープリターの 1つを使用できます。私見、それは巨大で、複雑で、強力で、常に友好的ではありませんが、大きな満足を与えることもできます。
あなたは本当に引き合いに出して、あなたの内側小さな声聞きたくない場合はConfucioを、あなたは準備ができている(バター)を破ることをホイールに飛ぶに使用できるルートを。この場合、-l
スプラッシュ画面の表示を避けるために必須です...
echo "20+5/2" | root -l
(const int)22
echo "20+5/2." | root -l
(const double)2.25000000000000000e+01
echo "cout<< 20+5/2 << endl;" | root -l
22
bash
echo $(( 1+1 ))
fish
math 1+1
zsh*
echo $((1+1))
*:およびksh93、yash
bash
awk "BEGIN {print 10/3}"
(低精度)bash
echo "10/3"|bc -l
(高精度)fish
math -s4 10/3
zsh*
echo $((10./3))
*:およびksh93、yash
もちろん、最小限のタイピングでawkを使用するようにシェルを設定できますcalc 10/3
(bash 1とfish 2でそれを行う方法に関する注意を参照してください)。
bashにawkを推奨する主な理由は、ほとんどすべてのUnixライクなOSにプリインストールされており、bc -l
10進数で20を印刷するよりも正確ではないがより人間に優しい出力で、かなり軽い(もちろんプロセスを開始するコストがかかる)ことです桁数(確かにawkを微調整してさらに小数桁を取得できます)。
このbash関数をに追加します~/.bashrc
:
calc(){ awk "BEGIN { print $*}"; }
calc
fish関数(つまり、という名前のテキストファイル/home/ndemou/.config/fish/functions/calc.fish
)を作成します。
function calc
awk "BEGIN{ print $argv }" ;
end
awk
システムのdouble
浮動小数点型を使用するため、任意の精度を実行しない他のほとんどのツールと同じくらい正確になります(gawkは任意の精度を実行できることに注意してください)。変数をawk
使用して、OFMT
数値を出力用の文字列表現に変換します(%.6g
デフォルトでは、%.17g
より高い精度が必要な場合は、それを変更できます)。
bc
。もはや機能しmath "scale=4; 10/3"
なくなるような新しいバージョンではなくなりました(math -s4 10/3
代わりに今)
math -s4
古いバージョンでもサポートされているようです)
SQLite:
echo 'select 1 + 1;' | sqlite3
MySQLの:
mysql -e 'select 1 + 1 from dual;'
PostgreSQL:
psql -c 'select 1 + 1 as sum;'
from dual
、Oracleによって必要とされ、MySQLはすることができselect
ずにfrom
句。2)PostgreSQLはエイリアスを必要としません。3);
はSQLiteでのみ必要です。4)MySQLとPostgreSQLは、データベースサーバーに接続できる場合にのみ機能します。5)MySQLとPostgreSQLは、結果の周りにASCIIアートテーブルを描画します。値のみを取得するには:mysql -BNe 'select 1+1'
およびpsql -tAc 'select 1+1
。
提供されたプログラムを介して、GNU Multiple Precision Arithmetic Libraryを使用しますrun-expr
。
tar -xvf gmp-5.1.3.tar.lz
./configure
およびmake
(インストールする必要はありません)make run-expr
~/bin
ディレクトリにシンボリックリンクを作成するのが好きです。ln -s /path/to/gmp/demos/expr/run-expr ~/bin/run-expr
alias calcf='run-expr -f'
、浮動小数点評価用出力:
# calcf '2/3'
"2/3" base 0: result 0.666666666666666666667e0
run-expr.c
ファイルから:
Usage: ./run-expr [-z] [-q] [-f] [-p prec] [-b base] expression...
Evaluate each argument as a simple expression. By default this is in mpz
integers, but -q selects mpq or -f selects mpf. For mpf the float
precision can be set with -p. In all cases the input base can be set
with -b, or the default is "0" meaning decimal with "0x" allowed.
関数クラスの違いと詳細については、マニュアルを参照してください。
bc
について読むのに時間がかかるかもしれません-l
。