我想對我的資料運行一個命令,該命令在 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_RIGHTROI2 代表
file2_LEFT和file2_RIGHTROI3 代表
file3_LEFT和file3_RIGHT
所以回圈中的命令將呼叫$file變數,但因為我不能使用檔案作為名稱,所以我$b嚴格地出于命名目的創建了變數。但是,這將不起作用,因為如果不將 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
.
.
uj5u.com熱心網友回復:
另一個潛在的解決方案是將您的“ROI”加載到一個陣列中并回圈遍歷它們,例如
c=('${ROI1_LEFT}' '${ROI2_LEFT}' '${ROI3_LEFT}' '${ROI1_RIGHT}' '${ROI2_RIGHT}' '${ROI3_RIGHT}')
i=0
for f in Left_hemi Right_hemi
do
for g in ROI{1..3}
do
echo "${f}_${g}_${c[i]}_subject.gz"
i=$(( i 1 ))
done
done
Left_hemi_ROI1_${ROI1_LEFT}_subject.gz
Left_hemi_ROI2_${ROI2_LEFT}_subject.gz
Left_hemi_ROI3_${ROI3_LEFT}_subject.gz
Right_hemi_ROI1_${ROI1_RIGHT}_subject.gz
Right_hemi_ROI2_${ROI2_RIGHT}_subject.gz
Right_hemi_ROI3_${ROI3_RIGHT}_subject.gz
因此,我對如何將其應用于實際資料的猜測是:
c=(${ROI1_LEFT} ${ROI2_LEFT} ${ROI3_LEFT} ${ROI1_RIGHT} ${ROI2_RIGHT} ${ROI3_RIGHT})
for subject in subjects
do
i=0
for f in Left_hemi Right_hemi
do
for g in ROI{1..3}
do
antsApplyTransforms -d 3 -i ${c[i]} -r ${dir_out}/FA_${subject}.nii.gz -o ${dir_out}/warped_atlas/"${f}_${g}_${c[i]}_${subject}.nii.gz"
i=$(( i 1 ))
done
done
done
uj5u.com熱心網友回復:
請您嘗試以下操作:
for a in Right_hemi Left_hemi; do
a2=${a%_*} # remove underscore and following characters
for b in ROI1 ROI2 ROI3; do
varname="${b}_${a2^^}" # concatenate $b, "_", and uppercased "$a2"
ROI=${!varname} # indirect variable reference
antsApplyTransforms -d 3 -i "$ROI" -r "${dir_out}/FA_${subject}".nii.gz -o "${dir_out}/warped_atlas/${a}_${b}_${subject}.nii.gz"
echo "${ROI} warp completed"
done
done
它生成varname諸如ROI1_LEFT使用回圈變數a,b然后$ROI1_LEFT通過${varname}.
uj5u.com熱心網友回復:
只需遍歷左右。以下代碼:
for a in Right_hemi Left_hemi; do
for b in ROI1 ROI2 ROI3; do
for direction in LEFT RIGHT; do
echo "${a}_${b}_\${${b}_${direction}}_*.gz"
done
done
done | head -n 3
輸出:
Right_hemi_ROI1_${ROI1_LEFT}_*.gz
Right_hemi_ROI1_${ROI1_RIGHT}_*.gz
Right_hemi_ROI2_${ROI2_LEFT}_*.gz
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367545.html
