大型Bash阵列或注销终止

时间:2016-07-20 18:03:20

标签: arrays linux bash perl shell

我正在使用调用Perl脚本来执行作业的bash脚本。然后将该作业的结果附加到bash中的数组中并求和。打印每次调用Perl脚本后的总和。脚本运行一段时间后,它会停止打印总和,而不会显示错误消息。

示例:

for i in {1..1999}; 
do
  fi="$(printf "%06d" $i)_sys6_uw_lipid_data.pdb"
  r_sq_value=$(perl r_value.pl "$fi")
  all_r_sq_values+=($r_sq_value)

sum=$(
awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}' "${all_r_sq_values[@]}"
)

echo "$sum <--- SUM"

done

该脚本可以正常运行一段时间,但很长一段时间后脚本会停止打印总和。

示例:

... skipping ... 
5.20884e+06 <--- SUM
5.22297e+06 <--- SUM
5.23754e+06 <--- SUM
5.25246e+06 <--- SUM
5.26714e+06 <--- SUM
5.28179e+06 <--- SUM
5.29737e+06 <--- SUM
 <--- SUM
 <--- SUM
 <--- SUM
 <--- SUM
 <--- SUM

没有错误我不确定这是因为脚本还是计算机由于它进入休眠而终止作业。它读取的所有数据文件都已满,并且可以使用Perl脚本单独工作。

任何建议或意见表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

将其更改为:

for i in {1..1999}; 
 do
  fi="$(printf "%06d" $i)_sys6_uw_lipid_data.pdb"
  r_sq_value=$(perl r_value.pl "$fi")
  (( all_r_sq_values += ($r_sq_value) ))

sum=$(
 awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}'     "${all_r_sq_values[@]}"
)

echo "$sum <--- SUM"

done