对while读取循环设置的变量执行算术运算

时间:2019-07-02 05:08:06

标签: bash awk while-loop text-manipulation

我想对从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中的每一行,并将数据解析为各自的变量名npqlenslen和{ {1}}。输入文件len如下所示:

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,三重bc<<<的情况下,我在网上找到的所有这些解决方案都无法使用。

我收到的最常见错误是:

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

我已经考虑过使用bc,但是我需要在每一行上执行这些操作,而awk一直持续到文件末尾。是否还有一种方法可以使用awk做我想做的事情?我真的不知道。

如果有人有答案或从文件中提取数据的另一种方法,我将非常感激。

谢谢。

更新:

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

有什么想法为什么不能将值保存到正确的变量中?

1 个答案:

答案 0 :(得分:1)

我不知道您真正想要获得什么。但看起来像

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