我有 4000 个文件,名称从 1 到 4000,包括 1 和 4000。
我写了下面的命令,我想对从 1 到 4000 的所有文件运行我编写的脚本 4000 次,所以我写道:
for i in {1..4000}; do pymol -c script.pml; done
问题是,脚本中的数字本身每次都需要更改,我的脚本如下:
load 1.pdb
remove resname GRM
color green, resname G8LE
load 0.pdb
color grey40, resname GRM
rotate x, -45
show spheres
save 1.png
我需要将数字 1(加载后的第一行和保存后的最后一行)替换为从 1 到 4000 的所有数字。以便每次加载和处理下一个文件,然后用其适当的数字保存,依此类推。
您能指导我我应该在脚本和/或终端中进行哪些更改才能实现这一点吗?
谢谢,穆罕默德
答案1
如果可能的话,最好有一个 argv。我不知道 pml 脚本是否可以从终端给出参数。否则,您可以使用这个 hack 从 bash/terminal 或从运行它的 .sh 脚本更改 pml 脚本。这将在运行 pml 脚本之前相应地更改它。
for i in {1..40000}
do
echo Evaluating for i = $i
# change the script
sed -i "s/.*load.*/load $i.pdb;/g" test.pml # Change the text inside the file
sed -i "s/.*save.*/save $i.png;/g" test.pml # Change the text inside the file
# <code to run the pml file>
done
如果有帮助的话请告诉我:)
评论后编辑:
为了区分加载命令,请在 pml 脚本的第一行中放置额外的空格并使用它。
sed -i "s/.*load .*/load $i.pdb;/g" test.pml # Change the text inside the file