2016-11-04 4 views
1

Я пытаюсь запустить команду из программы «plink1.9» для генетики популяции, изменяя два параметра.Вложенная петля с командной строкой

В приведенном ниже коде первый параметр i равен 1 или 100, а второй параметр j - 0,4 или 0,8. Я надеюсь, что это генерирует четыре разных выхода, каждый из которых содержит соответствующие значения входных параметров в имени выходного файла.

Это мой код, который не работает с «синтаксической ошибкой около неожиданного токена» do.

for i in 1 100 
do 
    for j in 0.4 0.8 
     do 
     plink --bfile myfile \ 
       --indep-pairwise ${i} 50 ${j} \ 
       --out myfile_${i}_50_${j}_indep 
     done 
done 

Если у кого-то есть предложения относительно того, как я могу это исправить, я был бы очень благодарен. Я пробовал несколько вариантов этого. В идеале я бы запускал несколько команд через цикл, менял все три переменные вместо двух и имел более двух возможных значений для каждой переменной, но я буду держать ее простой, пока она не будет работать.

+2

ли ваш сценарий использования DOS окончания строк (в этом случае 'у \ r' не признается в качестве ожидаемого ключевого слова)? Я хотел бы отметить, что теперь 'bash' 4.4 дает гораздо более ясное сообщение об ошибке в таких случаях. – chepner

ответ

1

Возможно, это связано с тем, что вы используете оболочку по умолчанию, которая не является Bash.

Обратите внимание, что вы можете упростить сценарий с помощью GNU Parallel:

parallel plink --bfile myfile \ 
      --indep-pairwise {1} 50 {2} \ 
      --out myfile_{1}_50_{2}_indep ::: 1 100 ::: 0.4 0.8 
Смежные вопросы