bash - 计算时bash中的变量错误
问题描述
我将管道的输出分配给一个变量,但是当我尝试使用该变量进行数学运算时,它不允许我:
%%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算术扩展中。这个地方只允许使用算术表达式。您尝试做的事情看起来像这样:
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
笔记:
推荐阅读
- r - 是否有 R 函数可应用于 R Shiny 的过滤器选项
- typescript - 在 Typescript 中简单、类型安全地使用 API
- vue.js - 如何将完成的 nuxt.js 应用程序部署到网络服务器?
- powershell - 检查字符串中的特殊字符
- javascript - 通过客户端 JS 将 HTML 输入到 JSON
- mongodb - Spring Data Aggregation 在嵌套文档结构中仅采用默认 id
- java - 使用 Exactly Once 处理的 Kafka 的 Spring Boot
- php - SAML 给出未处理的异常
- python - scrapy 错误:/usr/local/bin/scrapy:没有这样的文件或目录
- python - 如何在 django 中获取登录用户的所有对象的列表?