标签: bc

BC - 末尾没有“\\n”+ 以零开头?

这是一个bc输出,例如:

输入:

echo "scale=10; BLA-BLA-HERE-NOT-IMPORTANT" | bc
Run Code Online (Sandbox Code Playgroud)

输出:

.3708446283953709207058828124021300754352578903651372655882743141882\
77124645102027246581819139527644919407424570060822470537797066353573\
96635.8038454068 days
Run Code Online (Sandbox Code Playgroud)

两个问题:

  • 输出可以四舍五入为“0.3708 ...”之类的东西吗?
  • 我可以从末尾删除“\n”-s 吗?

我在bc.

bash bc

3
推荐指数
2
解决办法
3034
查看次数

BC - 输出范式?

我有一个很大的数字:

2923174917395723957
Run Code Online (Sandbox Code Playgroud)

那将是:

2,923*10^18
Run Code Online (Sandbox Code Playgroud)

bc 中是否有任何参数可以提供此输出?
例如:

$ echo '2923174917395723956 + 1' | bc
2,923*10^18
$ 
Run Code Online (Sandbox Code Playgroud)

或类似的东西...关键是它必须有一个简短的外观
谢谢!

bash bc

3
推荐指数
1
解决办法
1240
查看次数

在 zsh 中舍入/截断字符串中的数字(或使用外部工具)

我正在尝试做一个界面,bc以便可以直观地使用它,而不会“卡在”其中而烦恼。我没有时间对其进行太多测试,因为我陷入了另一个细节,即如何呈现结果(我认为是一个字符串)。

四舍五入或截断并不重要,两者都可以。看看下面,你立刻就明白了。我使用 zsh,但外部工具就可以了,因为我不会在任何时候或其他关键上下文中使用它,它只是一个桌面工具。

calc () {
    result=`bc <<EOF
    scale=3;
    $@
    EOF`
    echo ${result//%0/} # doesn't work; will only remove one zero
                        # also, if there are only zeroes, should
                        # remove dot as well - what about .333, etc.?
}
Run Code Online (Sandbox Code Playgroud)

编辑

下面的解决方案给我留下了深刻的印象,尤其是如何noglob摆脱引号!

但是,使用点来强制浮点计算是我永远不会记得的事情(你不使用这样的普通计算器)。它甚至有点冒险,特别是对于浮点会产生完全不同的结果(很可能是您想要的结果)并不明显的计算而言。

另外,下面的计算显示了一些不漂亮的输出(太长的实数和尾随点)。

也许我应该将这个(其中一些)与下面@Gille答案的输出格式结合起来?当我让它完美工作时,我会将结果发布在这里。(编辑:接受的答案效果很好。请务必阅读该答案的评论。)

calc () {
  echo $(($*));
}
alias calc='noglob calc'

calc 1./3
0.33333333333333331
calc 7.5 - 2.5
5.
Run Code Online (Sandbox Code Playgroud)

zsh bc math

3
推荐指数
1
解决办法
4146
查看次数

bc 输出二进制作为由空格分隔的半字节

我正在调试包含很多位移操作的代码,并且我经常使用 bc 来查看位级别上发生的情况。

这是我使用的:

$ echo 'obase=2;598980975283696640' | bc
100001010000000000100000011000000011000000000111010000000000
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以将输出作为空格分隔的半字节输出?例如

1000 0101 0000 0000 0010 0000 0110 0000 0011 0000 0000 0111 0100 0000 0000
Run Code Online (Sandbox Code Playgroud)

提前感谢您的回答!

编辑:感谢您的回复!然而,

我在另一个号码 262148 上试了一下。

应该:

100 0000 0000 0000 0100
Run Code Online (Sandbox Code Playgroud)

但它是:

1000 0000 0000 0000 100
Run Code Online (Sandbox Code Playgroud)

我猜脚本必须通过字符串向后搜索才能得到正确的结果?

string bc

3
推荐指数
1
解决办法
1189
查看次数

Shell Scripting:用实数作为指数计算一个数的幂

我正在使用 shell 脚本并使用以下表达式:

A=`echo "(( (($a / $b) ^ 0.3) -1 ))" |bc -l`
Run Code Online (Sandbox Code Playgroud)

我想要一个实数作为指数。我注意到如果我放置 0.3,它会四舍五入为一个整数并取零的幂。同样,如果我在上面的表达式中使用 5.5 或 5.9 代替 0.3,我会得到相同的答案。

如何计算指数为实数而不是整数的数的幂

shell-script bc

3
推荐指数
2
解决办法
1万
查看次数

如何在 shell 脚本中进行基本计算?

我想在shell中执行一些数学运算。例如:

5+50*3/20 + (19*2)/7
Run Code Online (Sandbox Code Playgroud)

我试过:

 #!/bin/bash
 read equ
 echo "scale=3; $equ" | bc -l
Run Code Online (Sandbox Code Playgroud)

预期输出:

 17.929
Run Code Online (Sandbox Code Playgroud)

我的输出:

 17.928
Run Code Online (Sandbox Code Playgroud)

shell-script bc math

3
推荐指数
1
解决办法
319
查看次数

为什么 bc 除以 0 时退出 0?

我试图想出一种快速且说明性的方法来生成不成功的退出状态,并认为除以零与bc将是一个好主意。

我惊讶地发现,虽然它确实产生了运行时错误,但退出状态仍然是 0:

$ echo 41 + 1 | bc
42
$ echo $?
0
$ echo 42/0 | bc
Runtime error (func=(main), adr=6): Divide by zero
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
  • 为什么 bc 实用程序不会以非零退出状态失败?

注意:对于我正在使用的快速非零退出状态 return 1

另外,来自shell-tips

$ expr 1 / 0
expr: division by zero
$ echo $?
2
Run Code Online (Sandbox Code Playgroud)

command-line posix bc

3
推荐指数
2
解决办法
1167
查看次数

将两列分开,而不是彼此分开

我有一个由我的脚本生成的 CSV 文件,它获取每个用户使用的 CPU 时间,但是它以秒为单位,我需要以小时为单位,所以我需要将每行除以 3600。

示例输入文件

**USER,TOTAL_CPU,AVERAGE_CPU
user1,1234552.0,1234.3
user2,9999999.0,82772.6
user3,7777776227.9,282882,0**
Run Code Online (Sandbox Code Playgroud)

如果我一次做一列,我可以很容易地得到我想要的:

for i in `awk -F , 'NR!=1{print $2}' myfile.out`; do bc -l <<< "scale=3; ($i/3600)"; done
Run Code Online (Sandbox Code Playgroud)

这给了我一次一列的输出。我同时想要两者,必须有更好的方法,而不是先制定一列,然后再制定下一列并将两者合并在一起。我同时想要两者,输出应该与输入完全相同,但不是秒,而是以小时为单位。

示例输出文件:

USER,TOTAL_CPU,AVERAGE_CPU
user1,342.931,0.342
user2,2777.777,22.992
etc.....
Run Code Online (Sandbox Code Playgroud)

awk text-processing csv bc

2
推荐指数
1
解决办法
257
查看次数

bc - 命令:没有给出适当的结果

我正在尝试在 linux 中使用 bc 命令进行简单的计算。一旦我想要所有小数位的值。其他时候我只想要整数部分

想要获得完整的小数位

$ echo "scale=10; ((900/1303) * 928)/600" | bc
1.0683039140
Run Code Online (Sandbox Code Playgroud)

现在我只想得到 1(整数)部分,省略小数部分,所以我尝试

$ echo "scale=0; ((900/1303) * 928)/600" | bc
0
Run Code Online (Sandbox Code Playgroud)

它如何显示零。它应该显示为 1

有人可以帮忙吗。在这种情况下,我不想使用 awk 或 sed 提取整数部分

bc

2
推荐指数
1
解决办法
120
查看次数

检查十进制数是否在 bc 的范围内

我已经写了这个 if ,这显然不起作用,而且我仍然无法克服它:

#LASTEFFECTIVEHASH
if (( $(echo "$LASTEFFECTIVEHASHMINVAL < $LASTEFFECTIVEHASH < $LASTEFFECTIVEHASHMAXVAL" | $BC -l) )); then
                echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $LOGFILE
else
                echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is not between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $MSGFILE $LOGFILE
fi
Run Code Online (Sandbox Code Playgroud)

但是,当值超出范围时,会导致以下结果:

20170810003646 - LASTEFFECTIVEHASH=139.2 is between 104.9 and 136.9
Run Code Online (Sandbox Code Playgroud)

我遵循数学语法:如果 x > 104.9 且 < 136.9,则在数学中写为104.9 < x < 136.9。但我怀疑 bash/bc 的行为与我的数学老师不同。

如果 bc 不会数到 137 就太好了;)

shell-script bc math floating-point

1
推荐指数
1
解决办法
1007
查看次数

bc 中基数大于 16 的数字是什么?

我最近阅读了关于 bc 的文章,发现它支持高达 999 的 obase。谁能指出我为 bc 设置的基数大于 16 的数字。

bc

0
推荐指数
1
解决办法
168
查看次数

如何缩短bash中的十进制输出?

现在我正在做一项涉及高级管道的作业,其中一个问题涉及计算百分比并将其缩短到小数点后三位。我已经成功计算了百分比:

echo "$ERRORS" / "$TOTAL" \* 100 | bc -l

这给出了正确的输出:2.64905226881102814400

ERRORS 和 TOTAL 都是包含整数的环境变量。

但我真的不知道如何修改此命令以仅输出 2.649 而不是完整的数字。我知道有一种方法可以使用 bc 中的“scale”来缩短到一定数量的小数位,但我尝试过,echo scale=3; "$ERRORS" / "$TOTAL" \* 100 | bc -l但没有成功。

我究竟做错了什么?

pipe bc floating-point

0
推荐指数
1
解决办法
176
查看次数

标签 统计

bc ×12

math ×3

shell-script ×3

bash ×2

floating-point ×2

awk ×1

command-line ×1

csv ×1

pipe ×1

posix ×1

string ×1

text-processing ×1

zsh ×1