【问题标题】:performing arithmetic on variables set by while-read loop对 while-read 循环设置的变量执行算术运算
【发布时间】:2019-07-02 05:08:06
【问题描述】:

我想对从while 循环中读取的一些变量执行一些算术和浮点算术运算。我的代码如下所示:

while read n p qlen slen len; do 

    random_var=$(( $qlen + 0 )) # gives all zeros, not saving qlen

    qcov=$(echo $len / $qlen | bc -l) #len and qlen are nothing, not working

    qcov=$( bc  <<< "scale=3; $len / $qlen" ) #same reason as above, not working

done < input_file.txt       

我正在拉动input_file.txt 中的每一行并将数据解析为它们各自的变量名称npqlenslenlen。输入文件input_file.txt 如下所示:

test1 12.345 123 234 12
test2 23.456 345 678 43
test3 98.765 6537 874 346
...

我遇到的问题是当我尝试对来自read 的任何变量执行一些算术运算时。我可以echo 变量就好了,但是一旦我尝试执行任何类型的算术操作,这些值就什么都不是。我怀疑它们不是以数字开头的数字,某种字符串类型(?)。我尝试了许多整数和浮点算术语句,但似乎无法保留变量中的值。 bc 命令,算术扩展,echo 管道到 bcbc 的三重 &lt;&lt;&lt;,我在网上找到的所有这些解决方案都不起作用。

我收到的最常见错误是:

  • 一无所有
  • (系统输入)错误1:解析错误
  • (系统输入)错误2:解析错误

我曾考虑过使用awk,但我需要在每一行上执行这些操作,并且 awk 会一直运行到文件末尾。有没有办法使用awk 做我想做的事?我真的不知道。

如果有人有从文件中提取数据的答案或替代方法,我将不胜感激。

提前致谢。

更新:

对代码的一些修改让我意识到input_file.txt 中的所有内容都只保存在第一个变量n 中。这就是其他变量为空以及所有变量的回显看起来正确的原因。

任何想法为什么没有将值保存到正确的变量中?

【问题讨论】:

  • 你能发布file file.txt的输出吗?请注意,file 是命令的名称。您的文件空间或制表符也是分隔的吗?
  • 对不起,我已经更新了问题以澄清我输入文件的意思。
  • 如果您不告诉我们文件中的实际内容,则无法回答。
  • 您是否更改了IFS 的值?此外,文件中字段之间的那些正常空格(即不是不间断空格或类似的东西)吗?
  • @Justin:请准确发布您实际使用的代码。在您的代码中,您不输出任何变量,因此如果您不打印它们,就不能说“这些值什么都不是”。此外,错误消息的措辞 parse error 看起来不像来自 bash。

标签: bash awk while-loop text-manipulation


【解决方案1】:

我不知道你真正想要得到什么。但它看起来像

awk '{print $5/$3}' input_file.txt 
0.097561
0.124638
0.0529295

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2017-04-27
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多