在 Ubuntu 14.04.1 LTS 64-bit
bash 中,我通过将浮点 bash 变量乘以bc
比例设置为 3 来清除浮点变量;但是,我无法将小数点后的位数设为零并去掉小数点左侧的零。我怎样才能转化,说0.005000000
成.005
?由于我的文件命名约定,这是必要的。感谢您的建议。
更新:我可以将它用于已经定义的 shell 变量并重新定义它们吗?以下代码给了我一个错误。
~/Desktop/MEEP$ printf "%.3f\n" $w
bash: printf: 0.005000: invalid number
0,000
Run Code Online (Sandbox Code Playgroud)
语言环境输出
@vesnog:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=tr_TR.UTF-8
LC_TIME=tr_TR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=tr_TR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=tr_TR.UTF-8
LC_NAME=tr_TR.UTF-8
LC_ADDRESS=tr_TR.UTF-8
LC_TELEPHONE=tr_TR.UTF-8
LC_MEASUREMENT=tr_TR.UTF-8
LC_IDENTIFICATION=tr_TR.UTF-8
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
的输出 echo $w
@vesnog:~$ echo $w
0.005000
Run Code Online (Sandbox Code Playgroud) #!/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
。
我该如何解决这个问题?
我想将 2^500 的值存储在变量中DELTA
。
我正在做
export DELTA=$(echo "scale=2; 2^500" | bc)
Run Code Online (Sandbox Code Playgroud)
但这并没有设置DELTA
为3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376
. 相反,它将它设置为
32733906078961418700131896968275991522166420460430647894832913680961\
33796404674554883270092325904157150886684127560071009217256545885393\
053328527589376
Run Code Online (Sandbox Code Playgroud)
我尝试了这个问题的答案(3岁),使用
export DELTA=$(echo "scale=2; 2^500" | bc | tr '\n' ' ')
Run Code Online (Sandbox Code Playgroud)
或者
export DELTA=$(echo "scale=2; print 2^500" | bc | tr '\n' ' ')
Run Code Online (Sandbox Code Playgroud)
但它们都不适用于设置变量,只是为了回应它。任何的想法?
我定义了 cbrt 函数来返回一个立方根。我需要取回一个整数(即使它接近立方根,在我的情况下也是可以接受的)。但是,当我将比例设置为 0 以获得整数时,我得到的数字非常不正确。这是怎么回事,我如何得到一个整数立方根?
bc -l
define cbrt(x) { return e(l(x)/3) }
scale=1;cbrt(1000000)
99.4
scale=0;cbrt(1000000)
54
Run Code Online (Sandbox Code Playgroud) 如何将命令行计算器添加到我的 bash 中?我找到了一些,但他们都使用句号作为小数点,但我想让它像世界上大多数人一样使用逗号作为小数点,见图:
(来源维基百科)
我发现的那些(全部以句号作为小数点)如下,这些行必须放入您的~/.bashrc
文件中:
使用 bc,它的优点是可以计算出大得离谱的数字:
calc () {
bc -l <<< "$@"
}
Run Code Online (Sandbox Code Playgroud)使用 awk,您可以使用三角函数和其他函数的助记符名称,并且可以使用分数指数,并且可以通过两个字符**
而不是在某些难以键入的键盘上给出指数^
:
calc () {
awk "BEGIN { print $* ; }"
}
Run Code Online (Sandbox Code Playgroud)我需要传递某些变量来bc
获得浮点输出,
var1=$((<some operation>))
var2=$((<some operation>)) #Needs var1
var3=$((<some operation>)) #Needs var2
bc -l <<< $var3 #Need output in Floating points
Run Code Online (Sandbox Code Playgroud)
输出:
(standard_in) 1: illegal character: $
Run Code Online (Sandbox Code Playgroud)
无论如何要克服这个?
更新:
diff=$(($epoc2-$epoc1))
var1=$(($diff / 60))
var2=$(($var1 / 57))
var3=`bc <<< 'scale=2; $var2'`
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法可以用 printf, awk, sed 分隔每千个非常大的数字?
所以 10000000000000 变成 10 000 000 000 000
谢谢
我理解bash
和其他一些解释器只对整数执行算术运算。在下面的for
循环中,我怎样才能做到这一点?我读过bc
可以使用,但不确定如何bc
在这种情况下使用。
total=0
for number in `cat /path/to/file`; do
total=$(($total+$number))
done
average=$(($total/10))
echo Average is $average
Run Code Online (Sandbox Code Playgroud)
文件:
1.143362
1.193994
1.210489
1.210540
1.227611
1.243496
1.260872
1.276752
1.294121
1.427371
Run Code Online (Sandbox Code Playgroud) 这是我对这个问题的评论之一,关于bc
在 shell 脚本中的使用。 bc
大量换行,例如:
> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456
Run Code Online (Sandbox Code Playgroud)
但是请注意,它们并不是变量中的真正换行符——或者至少如果不加引号使用的话,它们就不是换行符。例如,在分配中使用更多管道进行鬼混,例如:
num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')
Run Code Online (Sandbox Code Playgroud)
我意识到,虽然确实是一个\n
在bc
输出,检查echo $num > tmp.txt
与hexdump
示出了\n
(ASCII 10)具有绝对成为变量赋值的空间(ASCII 32)。
或者至少,在 unquoted 的输出中$num >
。这是为什么?
正如 fedorqui 指出的那样,如果您使用引号: echo "$num"
,您将再次获得换行符。通过检查hexdumpecho $num > tmp.1
和echo "$num" > tmp.2
hexdump之间的区别,这一点很明显;前者包含\
(反斜杠空格)而后者包含\\n
(反斜杠换行符)。
bc ×10
bash ×4
awk ×2
shell ×2
shell-script ×2
bashrc ×1
calculator ×1
newlines ×1
printf ×1
sed ×1