Вложенный цикл for в bash, где код выполняет разные действия для каждого элемента в цикле

#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