我的角色有问题.我认为这是dos和unix之间的转换问题.
我有一个浮点值的变量.当我使用echo命令打印它时,我得到:
0.495959
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用bc命令对该值进行操作时(我不确定如何编写bc命令).
echo $mean *1000 |bc
Run Code Online (Sandbox Code Playgroud)
我明白了:
(standard_in) 1 : illegal character: ^M
Run Code Online (Sandbox Code Playgroud)
我已经在我的.sh文件中使用了dos2unix命令.我想这是因为我的变量有^ M字符(不用echo命令打印)
我怎样才能消除这个错误?
我不得不在shell脚本中进行划分,最好的方法是:
result1=`echo "scale=3; ($var1 / $total) * 100"| bc -l`
result2=`echo "scale=3; ($var2 / $total) * 100"| bc -l`
Run Code Online (Sandbox Code Playgroud)
但我想比较的价值$result1和$result2
使用if test $result1 -lt $result2或if [ $result1 -gt $result2 ]不工作:(
知道怎么做吗?
我发现我偶然发现了一个奇怪的错误:
我尝试将"512"作为基数6读取,并将其输出为基数16:
echo "ibase=6;obase=16;512" | bc
161
Run Code Online (Sandbox Code Playgroud)
如您所见,输出为161,但它应该是bc(原文如此!).我尝试使用基数10:
echo "ibase=6;obase=10;512" | bc
512
Run Code Online (Sandbox Code Playgroud)
该值保持不变.好奇!默认obase是10.如果我省略它:
echo "ibase=6;512" | bc
188
Run Code Online (Sandbox Code Playgroud)
好吧,这似乎是正确的.在两步过程中,它有效:
echo "obase=16;"$(echo "ibase=6;512" | bc) | bc
BC
Run Code Online (Sandbox Code Playgroud)
所以我为不同的基础制作了一个剧本,但它让我感到困惑:
for ib in {6,8,10,16}; do echo $ib; for ob in {10,16}; do echo -en $ib $ob" \t => " ; echo "ibase=$ib;obase=$ob;333" | bc ; done; done;
6
6 10 => 333
6 16 => 108
8
8 10 => 333
8 16 => 119
10
10 10 => …Run Code Online (Sandbox Code Playgroud) 我应该使用哪个命令来汇总两个特定列的值?例如,我有文件:
1 4 5 1
2 3 5 2
7 8 6 3
Run Code Online (Sandbox Code Playgroud)
我想总结第二列和最后一列,以得到以下结果
1 4 5 1 5
2 3 5 2 5
7 8 6 3 11
Run Code Online (Sandbox Code Playgroud)
我用awk和bc吗?我找到了很多例子来总结整个专栏......
我bc在Bash 程序中使用负指数时遇到了困难.如果我执行echo "2*1.86929*10^05" | bc,我会得到一个结果,373858.00000如果我执行echo "2*1.86929*10^-05" | bc,我只得到一个结果0.使用负指数时如何获得更好的准确度?
我正在尝试在 bash 中使用 bc 以浮点形式输出结果。但是我得到以下代码的以下输出。我如何从这里获得乘法结果以及为什么我找不到命令。
#!/bin/bash
v1=3.41
v2=45
v3= $(bc <<< "scale=4;$v1 + $v2")
echo $v3
v3= $(bc <<< "scale=4;$v1 - $v2")
echo $v3
v3= $(bc <<< "scale=4;$v1 / $v2")
echo $v3
v3= $(bc <<< "scale=4;$v1 % $v2")
echo $v3
v3 = $(bc <<< "scale=4;$v1 * $v2")
echo $v3
Run Code Online (Sandbox Code Playgroud)
我得到的输出如下:
mint@mint ~ $ bash bc.sh
bc.sh: line 4: 48.41: command not found
bc.sh: line 6: -41.59: command not found
bc.sh: line 8: .0757: command not found
bc.sh: line 10: .0035: …Run Code Online (Sandbox Code Playgroud) 我想计算一下:
0x0404cb * 2**(8*(0x1b - 3))
Run Code Online (Sandbox Code Playgroud)
以十进制表示的是:
263371*2^^(8*(27-3))
Run Code Online (Sandbox Code Playgroud)
使用| bc.
我试过了
echo 263371*2^^(8*(27-3)) | bc
expr 263371*2^^(8*(27-3)) | bc
zsh: no matches found: 263371*2^^(8*(27-3))
Run Code Online (Sandbox Code Playgroud)
或尝试解决此问题
238348 * 2^176^
Run Code Online (Sandbox Code Playgroud)
我可以一次解决吗?
我有10位带符号的二进制数.我知道两种shell/bash方法将它们转换为小数但是无法识别签名.
1111101010应转换为-22而不是1002.
echo "ibase=2;obase=A;1111101010"| bc
Run Code Online (Sandbox Code Playgroud)
不起作用.以下都不是.
echo "$((2#1111101010))"
Run Code Online (Sandbox Code Playgroud)
我能做什么?
编辑:给出错误的预期结果; 错:-220,右:-22.
我正在尝试使用 bc 将 if 语句中的值与小数进行比较。我不确定我是否在我的程序中正确使用了 bc,if statement因为它似乎不起作用。它总是输入第四个if statement“ IF4”。其他条件似乎没有被正确读取?
#SET INITIAL SPEED
initialspeed() {
wpm=0
echo wpm: $wpm
#CHECKS IF SPEED WAS GIVEN
if [ -z "$wpm" ]
then
let wpm=0.6
echo IF1 wpm: $wpm #DEBUG
#CHECK IF SPEED IS VALID
elif [ 'echo "if$($wpm > 0.6)1;if$($wpm<=0.6)0" | bc' = 1 ]
then
echo IF2 wpm: $wpm #DEBUG
echo Error speed is less than 100 wpm
exit 3
elif [ 'echo "if$($wpm < 0.06)1;if$($wpm<=0.06)0" | …Run Code Online (Sandbox Code Playgroud) 我刚刚发现将stdout传输到Perl中,我很惊讶你甚至可以这样做:
[user@folder] $ echo print 1/3 | perl
0.33333[user@folder] $
Run Code Online (Sandbox Code Playgroud)
根据我的理解,你将print命令放入Perl,并使用Perl的代码进行浮点计算.请指正.但是,每次我这样做,我都会得到一个没有换行符的答案.我到处搜索,我只是不能将这些术语的关键字足以创建答案.
这是我正在谈论的内容的链接,在海报旁边 Thor: 我如何在bash中使用浮点除法?
他给出了一个惊人的答案,但我无法评论或给用户发消息,所以我决定在这里创建一个新问题.
我仍然试图围绕这是如何工作,变量.
$ three=3
$ echo $three/3 | perl
1[user@folder] $
Run Code Online (Sandbox Code Playgroud)
奖金问题:
它起初就像我试图让bash在算术运算中输出浮点数.我不明白为什么bc不能返回浮动.据说它可以,但它对我不起作用.
理想的情况是:
$ echo 1/3 | bc
0
$
Run Code Online (Sandbox Code Playgroud)
应该返回.333而不是0.我正在委托一个工具bc,并且bc应该能够做浮动.我只是不明白发生了什么.