_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
_
integer演算にPOSIX算術展開を使用できますecho "$((...))"
:
_$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22
_
かなり移植可能(_ash dash yash bash ksh93 lksh zsh
_):
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
は、atan
のような関数を取得するために_zmodload zsh/mathfunc
_をロードする必要があります)。
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(東部基準時 cアルキュレーター(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
_
ラッシュ の解決策、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 's 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)"
_
Marco の解法、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 -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スクリプトを使用-piを2乗して印刷します
_$ 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、科学および数値計算用の高性能言語およびインタプリタ。
非インタラクティブオプション:
_$ Julia -E '2.5+3.7'
6.2
_
計算には多くの方法があります。単純な式の場合、bash
自体を使用できます。
echo $((20+5))
またはexpr
:
expr 20 + 5
そして、複雑な場合のための素晴らしいツールbc
があります:
echo "20+5" | bc
ところで、bcは、ルート、対数、cos、sinなどの非常に複雑な式でも計算できます。
上記のソリューションは、非常に単純な計算には問題ありませんが、エラーが発生しやすくなります。例:
# 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
誰もまだawkについて言及していませんか?
POSIXシェル関数とawk数学パワーを使用して、次の(1行)関数を定義します。
calc(){ awk "BEGIN { print $*}"; }
次に、calc 1+1
またはcalc 5/2
などを実行します。
注:関数を常に使用できるようにするには、関数を〜/ .bashrc(または対応するシェルの起動ファイル)に追加します
もちろん、次の内容の「calc」という名前の小さなスクリプト:
#!/bin/sh -
awk "BEGIN { print $* }"
また働くことができました。
bc
を使用できます。例えば。、
$ echo "25 + 5" | bc
30
あるいはbc <<< 25+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'.
25 + 5
30
GNU bc
の実装は、stdinとstdoutの両方が端末に送信されるときに、起動時にそのヘッダー/著作権情報を出力します。これは(GNU固有の)-q
オプション。詳細については、 bcのマニュアルページ を参照してください。
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
に似ていますが、デフォルトとしてより適切に動作する方法が好きです
私はPythonを起動し、それをインタラクティブな計算機として使用するのが好きです(しかし、再び、Pythonプログラマーです)。
他の誰もそれについて言及しておらず、厳密に計算機ではありません(しかし、これらすべての汎用スクリプト言語はすべてではありません)ので、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
_
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
もちろん、calc 10/3
のような最小限のタイピングでawkを使用するようにシェルを構成できます(bashでそれを行う方法に関するメモを参照)1 そして魚2)。
Bashにawkを提案する主な理由は、ほとんどのUnixライクなOSにプリインストールされており、20を出力するbc -l
よりも正確ではないが人間にやさしい出力で、適度に軽量です(もちろんプロセスを開始するコストがあります)。 10進数(ただし、確かに awkを微調整して10進数を増やす )。
このbash関数を~/.bashrc
に追加します。
calc(){ awk "BEGIN { print $*}"; }
calc
fish関数(つまり、/home/ndemou/.config/fish/functions/calc.fish
という名前のテキストファイル)を作成します。
function calc
awk "BEGIN{ print $argv }" ;
end
$> ghc -e '20 + 5'
25
it :: Integer
また、ghci
、つまり Glasgow-Haskell Compiler インタラクティブモード(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
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')
残念ながら、ほとんどのコードをどこから借用したか覚えていないため、引用することはできません。
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システム は、非常に大量のデータを処理および分析するために必要なすべての機能を備えたOOフレームワークのセットを提供します効率的な方法...
Cインタープリター、 [〜#〜] cint [〜#〜]として使用できます。 、または 他の多くのCインタプリタ のいずれかを使用できます。私見、それは巨大で、複雑で、強力で、いつもフレンドリーではありませんが、大きな満足感を与えることもできます。
Confucio を引用している内部の小さな声を本当に聞きたくない場合は、準備ができています でホイールの(バター)フライを壊しますrootを使用できます。この場合 -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
「JavaScriptの力」を読んだとは信じられません(もちろん、Perlを除いて、他の部分の答えは賛成しなければなりませんでした)。
実際には、整数演算で十分な単純なケースでは、ビルトイン$((...))を使用して推奨します。それ以外の場合、ほとんどすべての場合、「...」をエコーします。 bcで十分です。
統計、行列演算などのいくつかの算術演算では、R
がより優れたツールです。
echo 25 + 5 | R --Vanilla
小さなデータセットとグラフィカルな破棄結果の場合、oocalc
は素晴らしいユーティリティです。
コンソールの計算には、concalc
を使用します。 (Sudo aptitude install concalc
)
その後、単にconcalc
と入力してEnterキーを押します。プロンプトは表示されませんが、計算を入力し(スペースは不要)、Enterキーを押すだけで、次の行に数値が表示されます。
SQLite:
echo 'select 1 + 1;' | sqlite3
MySQL:
mysql -e 'select 1 + 1 from dual;'
PostgreSQL:
psql -c 'select 1 + 1 as sum;'
提供されているrun-expr
プログラムを介して GNU倍精度演算ライブラリ を使用します。
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.
関数クラスの違いと詳細については manual を参照してください。
ここでの残りのソリューションにはすべて、顕著な欠点があります。
そこで、私はこれを最も簡単で最も信頼できる方法で実行できる新しいコマンドを作成しました。
サンプル:
$ solve 1/5
0.2
$ solve 1.5+3.1
4.6
$ solve 1/1000000
1e-06
$ solve 7+2^3
15
$ solve "sqrt(8)"
2.82842712474619
$ solve 1/0
non solvable ????: 1/0