【发布时间】: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 中的每一行并将数据解析为它们各自的变量名称n、p、qlen、slen 和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,bc 的三重 <<<,我在网上找到的所有这些解决方案都不起作用。
我收到的最常见错误是:
- 一无所有
- (系统输入)错误1:解析错误
- (系统输入)错误2:解析错误
我曾考虑过使用awk,但我需要在每一行上执行这些操作,并且 awk 会一直运行到文件末尾。有没有办法使用awk 做我想做的事?我真的不知道。
如果有人有从文件中提取数据的答案或替代方法,我将不胜感激。
提前致谢。
更新:
对代码的一些修改让我意识到input_file.txt 中的所有内容都只保存在第一个变量n 中。这就是其他变量为空以及所有变量的回显看起来正确的原因。
任何想法为什么没有将值保存到正确的变量中?
【问题讨论】:
-
你能发布
file file.txt的输出吗?请注意,file是命令的名称。您的文件空间或制表符也是分隔的吗? -
对不起,我已经更新了问题以澄清我输入文件的意思。
-
如果您不告诉我们文件中的实际内容,则无法回答。
-
您是否更改了
IFS的值?此外,文件中字段之间的那些正常空格(即不是不间断空格或类似的东西)吗? -
@Justin:请准确发布您实际使用的代码。在您的代码中,您不输出任何变量,因此如果您不打印它们,就不能说“这些值什么都不是”。此外,错误消息的措辞 parse error 看起来不像来自 bash。
标签: bash awk while-loop text-manipulation