0

我有十个目录,每个目录有大约 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

如果它们不是顺序的,我如何使用变量添加输入,并且我想做这十个目录的 for 循环,但它们包含不同数量的 bam 文件。

我应该使用 python 或 R 来做还是继续使用 shell 脚本?请指教。

4

1 回答 1

2

为什么不使用samtools?

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

一般来说,samtools merge可以像这样合并bam给定目录中的所有文件:

samtools merge merged.bam *.bam

编辑:如果 samtools 不是一个选项并且您必须使用 Picard,那么这样的东西呢?

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
于 2017-12-22T03:20:03.457 回答