" EN | wc -c > ref cat-6ren">
gpt4 book ai didi

bash - 计算时bash中的变量错误

转载 作者:行者123 更新时间:2023-12-03 08:19:29 25 4
gpt4 key购买 nike

我将管道输出分配给一个变量,但是当我尝试使用该变量进行数学运算时,它将不允许我执行以下操作:

%%bash
cd /data/ref/
grep -v ">" EN | wc -c > ref
cat ref
cd /example/
grep -v ">" SR | wc -l > sample
cat sample

echo $((x= cat sample, y= cat ref, u=x/y, z=u*100))

我收到此错误:
41858
38986
bash: line 7: x= cat sample, y= cat ref, u=x/y, z=u*100: syntax error in expression (error token is "sample, y= cat ref, u=x/y, z=u*100"

最佳答案

之所以收到该错误,是因为您将无效的算术表达式传递给了bash arithetic expansion。该位置仅允许使用算术表达式。您尝试做的事情看起来像这样:

ref="$(grep -v ">" /data/ref/EN | wc -c)"
sample="$(grep -v ">" /example/SR | wc -l)"

# this is only integer division
#u=$(( sample / ref ))
#z=$(( 100 * u ))

# to do math calculations, you can use bc
u=$(bc <<< "scale=2; $sample/$ref")
z=$(bc <<< "scale=2; 100*$u")

printf "%d, %d, %.2f, %.2f\n" "$ref" "$sample" "$u" "$z"
所以希望您能得到如下输出:
41858, 38986, 0.93, 93.00
笔记:
  • 在执行cd之前不需要grep,它接受带有目标文件名的完整路径作为参数。因此,无需更改目录,您就可以grep各个位置。
  • 为了保存命令的输出(仅是数字),您无需将其保存在文件中并对其进行cat编码。只需使用语法var=$( ),就会将var分配给此command substitution的输出。
  • 请记住,除数/38986/41858结果为0,因为它是整数除法。如果要使用小数进行数学计算,可以看到此post以了解如何使用bc进行计算。
  • 要打印任何内容,请使用 shell 内置的 printf 。在这里,最后两个数字的格式为2个小数点。
  • 关于bash - 计算时bash中的变量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64438489/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com