我知道的唯一计算器是bc
. 我想添加1
到一个变量,并输出到另一个变量。
我nextnum
从文件中的计数字符串中得到了变量:
nextnum=`grep -o stringtocount file.tpl.php | wc -w`
Run Code Online (Sandbox Code Playgroud)
让我们说nextnum
价值是1
。添加时1
,它会变成2
. 为了计算,我运行:
rownum=`$nextnum+1 | bc`
Run Code Online (Sandbox Code Playgroud)
但有错误:
1+1: command not found
Run Code Online (Sandbox Code Playgroud)
我只是在计算部分失败了。我试过改变反引号,但仍然无效。我不知道如何计算变量并将其输出到另一个变量。
高,我需要测试我的任意精度计算器,并且bc
似乎是一个很好的比较标准,但是,bc
确实将每个乘法的结果截断为每个所涉及的操作数的最大比例。
有没有一种快速的方法来关闭它或自动将每个乘法的比例设置为因子的比例总和,以便它不会失去任何精度?
如果您对此有更优雅的解决方案,涉及除 之外的其他内容bc
,我将不胜感激您的分享。
例子:
$ bc <<< '1.5 * 1.5'
2.2
Run Code Online (Sandbox Code Playgroud)
真正的答案是 2.25。
bash
有一个方便的文件.bash_history
,它保存命令的历史记录,并且在下次执行bash
历史记录时填充保存的命令。
是否可以以bc
相同的方式将命令历史记录保存到文件中,然后在启动时加载它以便保留 bc 历史记录?
我尝试阅读GNU bc 手册,它提到了readline
和libedit
。从ldd /usr/bin/bc
我看到我的使用readline
,并readline
具有write_history
和read_history
功能。这个功能是在里面实现的bc
还是我需要修补的bc
?
我总觉得bc
有些神秘和耐人寻味。这是一个在原来的Unix程序。它本身就是一种编程语言。所以我很乐意抓住任何我能找到的机会来使用它。
由于 bc 似乎不包括阶乘函数,我想定义一个这样的:
define fact(x) {
if (x>1) {
return (x * fact(x-1))
}
return (1)
}
Run Code Online (Sandbox Code Playgroud)
但是......我不能重复使用它,是吗?
我希望能够做类似的事情
me@home$ bc <<< "1/fact(937)"
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下方法计算文件夹中包含的文件的平均熵:
{ echo '('; find . -type f -exec entropy {} \; | \
grep -Eo '[0-9.]+$' | \
sed -r 's/$/+/g'; echo '0)/';
find . -type f | wc -l; } | \
tr -d '\n' | bc -l
Run Code Online (Sandbox Code Playgroud)
entropy
作为计算文件的香农熵的可执行文件,给出以下形式的输出:
$ entropy foo
foo: 5.13232
Run Code Online (Sandbox Code Playgroud)
上述命令出错:
(standard_in) 1: syntax error
Run Code Online (Sandbox Code Playgroud)
但是,生成的输出似乎没有问题:
$ { echo '('; find . -type f -exec entropy {} \; | \
grep -Eo '[0-9.]+$' | \
sed -r 's/$/+/g'; echo '0)/'; \
find . …
Run Code Online (Sandbox Code Playgroud) 我在 Ubuntu Linux 中使用 bc。它有一个预定义的常量 PI,设置为 99。为什么 bc 将 PI 定义为 99 而不是 3.14159...?
#!/bin/bash
q=$(bc <<< "scale=2;$p*100")
head -n$q numbers.txt > secondcoordinate.txt
Run Code Online (Sandbox Code Playgroud)
这只是剧本的一部分,但我认为这足以阐明我的意图。p
是一个只有两位小数的变量,所以q
应该是一个整数...不过, bc
例如,显示10.00
而不是10
。
我该如何解决这个问题?
我有一个包含以下内容的文件:
37 * 60 + 55.52
34 * 60 + 51.75
36 * 60 + 2.88
36 * 60 + 14.94
36 * 60 + 18.82
36 * 60 + 8.37
37 * 60 + 48.71
36 * 60 + 34.17
37 * 60 + 42.52
37 * 60 + 51.55
35 * 60 + 34.76
34 * 60 + 18.90
33 * 60 + 49.63
34 * 60 + 37.73
36 * 60 + 4.49
Run Code Online (Sandbox Code Playgroud)
我需要编写一个 shell 命令或 Bash …
我想将两个数字与bc
. 根据StackOverflow 上这个高度评价的答案,我可以这样做:
printf '%s\n' '1.2 > 0.4' | bc
Run Code Online (Sandbox Code Playgroud)
bc
发送1
到 STDOUT,表明该语句为真(如果该语句为假,它将返回 0)。
与所有其他运算符不同,关系运算符( '<', '>', "<=", ">=", "==", "!=" )仅作为 if、while、或在 for 语句中。
也许我误解了,但是这种语言似乎不允许使用上面示例中使用的语法。
单独使用关系运算符是否bc
违反 POSIX?如果是这样,我应该如何重写我的例子?
bc ×10
shell ×3
bash ×2
calculator ×2
arithmetic ×1
gnu ×1
math ×1
posix ×1
readline ×1
scripting ×1