我如何编写一个遍历所有主题的脚本,并为每个主题创建一个新脚本?目的是创建一个脚本,该脚本在超级计算机上针对每个主题运行名为FreeSurfer的程序。超级计算机队列限制了每个脚本/作业将花费多长时间,因此我将让每个作业运行1个主题。最终,由于我不能同时提交所有作业,所以我想使作业提交过程自动化。在我的主题文件夹中,我有三个主题:3123、3315和3412。
我对MATLAB脚本很熟悉,所以我在想像这样的东西
for i=1:length(subjects)
nano subjects(i).sh
<contents of FreeSurfer script>
input: /subjects(i)/scan_name.nii
output: /output/subjects(i)/<FreeSurfer output folders>
end
我知道我混合了MATLAB和linux的各个方面,但希望目标是相对明确的。请让我知道是否有更好的方法。
这是给定主题的FreeSurfer脚本的示例
#!/bin/bash
#PBS -l walltime=25:00:00
#PBS -q long
export FREESURFER_HOME=/gpfs/software/freesurfer/6.0.0/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh
export SUBJECTS_DIR=/gpfs/projects/Group/ppmi/freesurfer/subjects/
recon-all -i /gpfs/projects/Group/ppmi/all_anat/3105/Baseline/*.nii -s
$SUBJECTS_DIR/freesurfer/subjects/3105 -autorecon-all
-i选项提供输入,-s选项提供输出。
答案 0 :(得分:0)
更改脚本以接受主题作为参数,以便只有一个通用脚本。
#!/bin/bash
#PBS -l walltime=25:00:00
#PBS -q long
subject="$1"
export FREESURFER_HOME=/gpfs/software/freesurfer/6.0.0/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh
export SUBJECTS_DIR=/gpfs/projects/Group/ppmi/freesurfer/subjects/
recon-all -i /gpfs/projects/Group/ppmi/all_anat/"$subject"/Baseline/*.nii -s
$SUBJECTS_DIR/freesurfer/subjects/"$subject" -autorecon-all
您可以针对所有主题调用它
for s in 3123 3315 3412;
do
./yourscriptnamehere.sh "$s"
done
根据需要添加错误处理。