【发布时间】:2022-01-04 03:53:57
【问题描述】:
我想对我的数据运行一个命令,该命令在 2 个半球内注册 3 个感兴趣区域 (ROI),并适当地命名每个输出。我无法弄清楚如何在嵌套循环中保留一行命令,而不是将循环分解为几个特定的 ROI 循环。
一般来说是这样的:
for a in Right_hemi Left_hemi; do
for b in ROI1 ROI2 ROI3; do
for file in ${file1_LEFT} ${file2_LEFT} ${file3_LEFT} ${file1_RIGHT} ${file2_RIGHT} ${file3_RIGHT}; do
antsApplyTransforms -d 3 -i $file ${dir_out}/warped_atlas/${a}_${b}_${subject}.nii.gz
echo "${a}_${b}_${subject}.nii.gz"
done
done
done
$file是代码中使用的实际图片的变量
-
$file1_LEFT变量示例:/path/to/variable/file1_LEFT.nii.gz
$a 是一个命名变量(右/左)
$b 是$file 的命名变量,因为我不能使用文件路径/名称
为清楚起见,在$b:
-
ROI1 代表
file1_LEFT和file1_RIGHT -
ROI2 代表
file2_LEFT和file2_RIGHT -
ROI3 代表
file3_LEFT和file3_RIGHT
所以循环中的命令将调用$file 变量,但因为我不能使用文件作为名称,所以我创建了$b 变量严格用于命名目的。但是,这将不起作用,因为如果不将 ROI 与所有文件混合,我将无法分离 ROI,例如,我无法获得组合 ROI1_file2 或 ROI1_file3 的输出。每个 $b 名称必须与相应的 $file 变量匹配,因此输出应为:
Left_hemi_ROI1*.gz # where ROI1 represents file1_LEFT
Right_hemi_ROI1*.gz # where ROI1 represents file1_RIGHT
Left_hemi_ROI2*.gz # where ROI2 represents file2_LEFT
Right_hemi_ROI2*.gz # where ROI2 represents file2_RIGHT
.
.
【问题讨论】:
标签: bash for-loop nested-loops