Работа с путями в циклах Unix
Относительный unix новичок. У меня есть несколько каталогов (Sample*/
), в котором я хочу объединить все файлы raw.sort.bam с помощью samtools. У меня есть рабочий код для этого в каждом каталоге, но я хочу иметь дело со всеми каталогами одновременно, запустив код из родительского каталога. Моя проблема в том, что я вынужден вызывать samtools с полным путем, и у меня возникают проблемы с выяснением, как этот путь будет работать в цикле Unix.
Во-первых, вот мой рабочий код для слияния и преобразования в каждом каталоге:
/home/user/pathtosamtools/sam merge -o all.sort.bam *raw.sort.bam
Теперь мой нерабочий код пытается сделать это для всех каталогов при запуске из родительского каталога:
for f in `ls Sample*/`; do /home/user/pathtosamtools/sam merge -o $f all.sort.bam Sample*/*raw.sort.bam; done
Ошибки:
[bam_merge_core_ext] fail to open file all.sort.bam
[bam_header_read] bgzf_check_EOF: Invalid argument
[bam_header_read] invalid BAM binary header (this is not a BAM file).
Segmentation fault
Заранее спасибо.
1 ответ
for dir in Sample*/; do
/home/user/pathtosamtools/sam merge -o "$dir/all.sort.bam" "$dir"/*raw.sort.bam
done
Вы предоставляете шаблон глобуса в цикле for.
В целях безопасности всегда указывайте свои переменные.