#bash #for-loop #nested-loops #imaging
#bash #for-цикл #вложенные циклы #отображение
Вопрос:
У меня есть 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
Любой совет был бы с благодарностью принят!
Спасибо!
Комментарии:
1.Удалите
{
}
и запятые . Этоfor i in something somethingelse 1 2 3 -5 80 etc ; do
2. Вы также не можете использовать вложенные циклы, вы должны использовать индекс в двух массивах.
Ответ №1:
Вы могли бы подготовить два массива, а затем использовать общий индекс:
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[@]})) amp;amp; 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