как сделать отдельные временные каталоги для каждого процесса в пакетном задании - PullRequest
0 голосов
/ 30 июня 2019

Я только начал изучать биоинформатику в своей лаборатории, и я - новичок.Я использую инструмент аннотации генома Kofamscan из NCBI, и я получаю сообщение об ошибке, которое может быть связано с тем, что результаты нескольких процессов хранятся в одном временном каталоге, а файлы сворачиваются.Поэтому я хочу создать отдельные временные каталоги для каждого процесса (temp1 для process1, temp2 для process2 и т. Д.), Но я не знаю, как написать код, который его разрешает.

files=(`cat kofam_files`) #input files 

TASK_ID = `expr ${SGE_TASK_ID} -1`

~/kofamscan/bin/exec_annotation -o marine_kofam.txt --tmp-dir **** ${files[$TASK_ID]}

Я, наверное,Мне нужно что-то написать в разделе **** приведенного выше кода, но я не знаю, как их написать.

Заранее спасибо.

Ryohei

1 Ответ

0 голосов
/ 30 июня 2019

Именно поэтому mktemp команда существует:)

Следующий фрагмент минимальных изменений, которые вы должны внести в свой:

files=(`cat kofam_files`) #input files 

TASK_ID=`expr ${SGE_TASK_ID} -1`

~/kofamscan/bin/exec_annotation -o marine_kofam.txt --tmp-dir `mktemp -d` ${files[$TASK_ID]}

Примечаниечто временный каталог будет создан в /tmp.Вы можете использовать флаги для mktemp для создания временных подкаталогов в текущем каталоге.

РЕДАКТИРОВАТЬ: Следуя рекомендациям для bash, можно также,

  1. Используйте более новые команды mapfile или readarraybash 4+) вместо использования от cat до создания массивов в bash
  2. Использовать $(...) вместо `...`, поскольку они поддерживают вложение
  3. Использование $((...)) вместо архаичного синтаксиса expr (см. этот поток )

Окончательный фрагмент будет выглядеть следующим образом:

readarray -t files < kofam_files #input files 

TASK_ID=$((SGE_TASK_ID - 1))

~/kofamscan/bin/exec_annotation -o marine_kofam.txt --tmp-dir $(mktemp -d) ${files[$TASK_ID]}
...