我使用bash脚本为程序生成输入文件。 bash脚本生成随机数列表,然后写入输入文件。我的bash脚本有两个部分,第一部分生成随机数列表,第二部分使用随机数生成输出文件内容。
# 1- Generate Random Numbers
for i in {1..200}
do
ARRAY+=($((RANDOM%885+0)))
done
echo "
${ARRAY[*]}
"> random_numbers.txt
# 2- construction of output file
echo "
# Packmol input file
filetype pdb
output peg_$(($npeg)).pdb
# selecting the structure according random number
structure peg${ARRAY[0]}.pdb
number 1
inside cube -$d. -$d. -$d. $d.
end structure
structure peg${ARRAY[1]}.pdb
number 1
inside cube -$d. -$d. -$d. $d.
end structure
structure peg${ARRAY[2]}.pdb
number 1
inside cube -$d. -$d. -$d. $d.
end structure
structure peg${ARRAY[3]}.pdb
number 1
inside cube -$d. -$d. -$d. $d.
end structure
structure peg${ARRAY[4]}.pdb
number 1
inside cube -$d. -$d. -$d. $d.
end structure
continued *****
structure peg${ARRAY[24]}.pdb
number 1
inside cube -$d. -$d. -$d. $d.
end structure
"> output.inp
如果我可以通过更改数组编号在下面给出的重复行上运行不同范围(25,50,75 ...)的循环,是否有办法?
structure peg${ARRAY[*]}.pdb
number 1
inside cube -$d. -$d. -$d. $d.
end structure
答案 0 :(得分:0)
{
# write header
printf '%s\n' '# Packmol input file' 'filetype pdb' "output peg_$((npeg)).pdb"
# iterate over array contents
for value in "${ARRAY[@]}"; do
printf '%s\n' \
"structure peg${value}" \
' number 1' \
' inside cube -$d. -$d. -$d. $d.' \
'end structure'
done
} >output.inp
...只取每25个项目,修改内循环如下:
# iterate over array contents
for ((i=0; i<${#ARRAY[@]}; i+=25)); do
printf '%s\n' \
"structure peg${ARRAY[$i]}" \
' number 1' \
' inside cube -$d. -$d. -$d. $d.' \
'end structure'
done
注意事项:
>>output.inp
放在一堆单独的命令上每次重新打开一次文件,使其效率非常低。{start..end..count}
语法是非常有限的(不能使用变量),所以C语言for循环语法是非常可取的。