Linux объединяет несколько файлов в Picard

У меня есть десять каталогов, и каждый каталог содержит около 10-12 файлов BAM. Мне нужно использовать пакет Picard, чтобы объединить их, и я хочу найти способ сделать это лучше.

basic command:
java -jar picard.jar MergeSamFiles \
  I=input_1.bam \
  I=input_2.bam \
  O=merged_files.bam

directory 1:
java -jar picard.jar MergeSamFiles \
  I=input_16.bam \
  I=input_28.bam \
  I=input_81.bam \
  I=input_34.bam \
  ... \
  ... \
  I=input_10.bam \
  O=merged_files.bam

directory 2:
java -jar picard.jar MergeSamFiles \
  I=input_44.bam \
  I=input_65.bam \
  I=input_181.bam \
  I=input_384.bam \
  ... \
  ... \
  I=input_150.bam \
  O=merged_files.bam

Как я могу добавить вход с помощью переменной, если они не в последовательном, и я хотел бы сделать цикл для этих десяти каталогов, но они содержат различное количество файлов BAM.

Должен ли я использовать Python или R для этого или продолжать использовать сценарий оболочки? Пожалуйста посоветуй.

1 ответ

Решение

Почему бы не использовать samtools?

for folder in my_bam_folders/*; do
    samtools merge $folder.bam $folder/*.bam
done

В общем, samtools merge может объединить все bam файлы в данном каталоге, как это:

samtools merge merged.bam *.bam

РЕДАКТИРОВАТЬ: Если samtools не вариант, и вы должны использовать Пикард, как насчет этого?

for folder in my_bam_folders/*; do
    bamlist=$(for f in $folder/*.bam; do echo -n "I=$f " ; done)
    java -jar picard.jar MergeSamFiles $bamlist O=$folder.bam
done
Другие вопросы по тегам