[20230823]dc命令简单学习.txt
--//dc 作为命令行计算器自己很少使用,找机会学习一下.
--//dc 对比 bc 作为计算器最大的不同的地方是采用Reverse Polish Notation (RPN).又叫逆波兰表示法,简单一点就是运算符号在最后
--//,取消了复杂的括号等优先级问题.简化复杂运算.
$ dc --help
Usage: D:\tools\linux\usr\local\wbin\dc.exe [OPTION] [file ...]
-e, --expression=EXPR evaluate expression
-f, --file=FILE evaluate contents of file
-h, --help display this help and exit
-V, --version output version information and exit
Report bugs to bug-gnu-utils@prep.ai.mit.edu
Be sure to include the word ``dc'' somewhere in the ``Subject:'' field.
D:\>dc
1 3 + pq
4
--//先输入操作的数值,然后输入操作的运算符号,p显示结果.
--//注意一个细节,负数因为要规避减号(-),使用下划线(_)代替.例子:
D:\>dc -e "1 -3 - p"
dc: stack empty
-2
$ dc -e "1 _3 - p"
4
--//k表示精度.例子:
$ dc -e "10 k 1 3 / p"
.3333333333
--//v表示平方根,例子:
D:\>dc -e "4 k 4 vp 4.4 vp "
2.0000
2.0976
--//10进制转16进制
$ dc -e "10 i 16 o 123 pq"
7B
--//16进制转10进制,16进制要输入大写,因为前面已经输入16 i ,这样A表示10进制的10.
$ dc -e "16 i A o 7B pq"
123
--//也可以这样执行:
$ dc -e "10 o 16 i 7B pq"
123
--//简单总结,还有许多复杂的表示函数,不过感觉这些就够用了:
k -> 表示精度
v -> 表示平方根
_N -> 表示-N
p -> 表示显示结果
i ->输入进制
o ->输出进制
q -> 表示退出.
--//当然还有许多建议看man 文档。
--//以前的例子,将文本里面的数字累加:
$ cat a.txt
301000.0000
293000.0000
66000.0000
182000.0000
98000.0000
252914.5300
235000.0000
300000.0000
330000.0000
--//使用dc的难点是需要输出多少+.
$ (cat a.txt ; seq $(($(cat a.txt |wc -l ) -1 ))|xargs -I {} echo '+' ;echo pq ) | dc
2057914.5300
--//我找到当时检索到的方法不用计算输入多少加号的方法.
$ cat a.txt | dc -f - -e '[+z1<r]srz1<rp'
2057914.5300
--//-e后面那一串什么意思,即使看了man dc文档,我也没看懂表示什么意思.而且如果计算数据很多会非常慢.