【发布时间】:2016-07-04 03:47:07
【问题描述】:
我想将数组中的所有条目与3.17 * 10^-7 之类的数字相乘,但 Bash 不能这样做。我尝试使用awk 和bc,但它不起作用。如果有人可以帮助我,我将不胜感激。
输入数据示例(总共4000个数据文件):
TecN210500-0100.plt
TecN210500-0200.plt
TecN210500-0300.plt
TecN210500-0400.plt
......
这是我的代码:
#!/bin/bash
ZS=($(find . -name "*.plt"))
i=1
Variable=$(awk "BEGIN{print 10 ** -7}")
Solutiontime=$(awk "BEGIN{print 3.17 * $Variable}")
for Dataname in ${ZS[@]}
do
Cut=${Dataname:13}
Timesteps=${Cut:0:${#Cut}-4}
Array[i]=$Timesteps
i=$((i++))
p=$((i++))
done
Amount=$p
for ((i=1;i<10;i++))
do
Array[i]=${i}00
done
for (($i=1;i<$Amount+1;i++))
do
Array[i]=$(awk "BEGIN{print ${Array[i]} * $Solutiontime}")
done
Array[0]=Solutiontime
第一个循环: 提取 e.i. “0100”。
第二个循环: “删除”前导零 -> e.i. “100”
最后一个循环: 乘以时间步 -> e.i. "100 * 3.17*10^-7"
【问题讨论】:
-
不,伙计,这段代码难以辨认。请通过缩进四个空格来改进格式。另见Help Center
-
这将永远不会增加 $i:
i=$((i++))-- 因为您使用的是 post-increment 运算符,返回值是 previousi的值分配给i。++已经是赋值运算符了,坚持使用((i++)); p=$i -
感谢您的建议!
-
那么您只是根据文件名
TecN210500-0100.plt查找输出,而不是从文件中读取任何内容吗? -
是的,只是文件名