我有一个python脚本,通常是这样从BASH shell执行的:
pychimera $(which dockprep.py) -rec receptor1.pdb -lig ligand1.mol -cmethod gas -neut
如您所见,某些参数需要输入(例如-rec),而其他则不需要输入(例如-neut)。我必须用不同的输入执行该脚本154次。如何使用GNU并行脚本并行运行8个线程?
pychimera $(which dockprep.py) -rec receptor1.pdb -lig ligand1.mol -cmethod gas -neut
pychimera $(which dockprep.py) -rec receptor2.pdb -lig ligand2.mol -cmethod gas -neut
pychimera $(which dockprep.py) -rec receptor3.pdb -lig ligand3.mol -cmethod gas -neut
...
答案 0 :(得分:3)
我想你想要这个:
parallel 'pychimera $(which dockprep.py) -rec receptor{}.pdb -lig ligand{}.mol -cmethod gas -neut' ::: {1..154}
如果您有8个以上的CPU内核,并且一次要8个进程,请使用:
parallel -j8 ...
如果要查看无需实际运行即可运行的命令,请使用:
parallel --dry-run ...
答案 1 :(得分:1)
示例commands.txt
生成器脚本:
#!/usr/bin/env bash
if [ "$#" -ne 1 ]; then
echo "missing parameter: n"
exit 1
fi
rm commands.txt 2> /dev/null
dockp=$(which dockprep.py)
for((i=1;i<=$1;i++)); do
echo "pychimera $dockp -rec receptor$i.pdb -lig ligand$i.mol -cmethod gas -neut" >> commands.txt
done
如果将上述bash脚本另存为cmdgen.sh
,则可以将其运行为:
bash cmdgen.sh 100
如果您需要n
为100。
要并行运行命令:
$ module load parallel
$ parallel < commands.txt