2016-08-18 1 views
0

Я не знаком с perl и bash, но мне нужно использовать Perl-скрипт, который включает команды bash, чтобы это сделать. вот команда:Как уменьшить несколько аргументов в perl-скрипте

basename -t input.nii.gz -o output \ 
      -g atlas1.nii.gz -l labels1.nii.gz \ 
      -g atlas2.nii.gz -l labels2.nii.gz \ 
      -g atlas3.nii.gz -l labels3.nii.gz \ 
      -g atlas4.nii.gz -l labels4.nii.gz \ 
      -g atlas3.nii.gz -l labels3.nii.gz \ 
      -g ............ \ 
      -l ............ 

У меня есть 18 файлов атлас и этикеток, а команда не может быть выполнена только в строго определенном порядке. Можно ли уменьшить аргументы следующим образом:

basename -t input.nii.gz -o output -g atlas%.nii.gz -l labels%.nii.gz 

спасибо.

+2

Я действительно смущен ... Я понимаю ваш вопрос, но не «basename» просто удаляет путь из файла? Я не думал, что у него даже есть такие параметры, как -t и -o. Я мог бы быть полностью в левом поле. – Hambone

+2

Это не Perl, и у bash действительно есть переменные. Он будет больше похож на 'atlas $ i.nii.gz' – ikegami

+3

Пожалуйста, будьте более конкретным. basename - команда в bash, и у нее нет параметров -t, -o -g или -l. http://linux.die.net/man/1/basename –

ответ

1

Вы можете использовать цикл для создания массива аргументов для использования с basename.

for i in {1..18}; do 
    args+=(-g atlas$i.nil.gz -l labels$i.nii.gz) 
done 
basename -t input.nii.gz -o output "${args[@]}" 

 Смежные вопросы

  • Нет связанных вопросов^_^