在 bash 中嵌套 for 循环,其中代码对循环中的每个项目执行不同的操作
Nested for loop in bash, where the code performs a different action for each item in the loop
我有10个目录(MDD1、MDD2、MDD3、MDD4、MDD5、OCD1、OCD2、OCD3、OCD4、OCD5),每个目录都有一张图片(lesion_right_warped.nii.gz)。我正在尝试编写一个代码,将每个图像乘以预先指定的值 {88,-8.7,-33.3,0,20,-43,4,-7,27,82} - 即乘以 MDD1/lesion_right_warped.nii.gz 乘以 88,MDD2/lesion_right_warped.nii.gz 乘以 -8.7,等等。我下面的代码无法正常工作,因为它最终只是将所有图像乘以 82(它遍历每个值并覆盖前一个值)。
#!/bin/bash
for i in *;
do
for j in {88,-8.7,-33.3,0,20,-43,4,-7,27,82};
do
fslmaths $i/lesion_right_warped.nii.gz -mul $j $i/lesion_right_response.nii.gz
done
done
如有任何建议,我们将不胜感激!
谢谢!
您可以准备两个数组,然后使用共享索引:
dirs=(*)
factors=(88 -8.7 -33.3 0 20 -43 4 -7 27 82)
# Make sure both have the same number of elements
((${#dirs[@]} != ${#factors[@]})) && exit 1
for ((i = 0; i < ${#dirs[@]}; ++i)); do
fslmaths "${dirs[i]}/lesion_right_warped.nii.gz" \
-mul "${factors[i]}" "${dirs[i]}/lesion_right_response.nii.gz"
done
我有10个目录(MDD1、MDD2、MDD3、MDD4、MDD5、OCD1、OCD2、OCD3、OCD4、OCD5),每个目录都有一张图片(lesion_right_warped.nii.gz)。我正在尝试编写一个代码,将每个图像乘以预先指定的值 {88,-8.7,-33.3,0,20,-43,4,-7,27,82} - 即乘以 MDD1/lesion_right_warped.nii.gz 乘以 88,MDD2/lesion_right_warped.nii.gz 乘以 -8.7,等等。我下面的代码无法正常工作,因为它最终只是将所有图像乘以 82(它遍历每个值并覆盖前一个值)。
#!/bin/bash
for i in *;
do
for j in {88,-8.7,-33.3,0,20,-43,4,-7,27,82};
do
fslmaths $i/lesion_right_warped.nii.gz -mul $j $i/lesion_right_response.nii.gz
done
done
如有任何建议,我们将不胜感激! 谢谢!
您可以准备两个数组,然后使用共享索引:
dirs=(*)
factors=(88 -8.7 -33.3 0 20 -43 4 -7 27 82)
# Make sure both have the same number of elements
((${#dirs[@]} != ${#factors[@]})) && exit 1
for ((i = 0; i < ${#dirs[@]}; ++i)); do
fslmaths "${dirs[i]}/lesion_right_warped.nii.gz" \
-mul "${factors[i]}" "${dirs[i]}/lesion_right_response.nii.gz"
done