linux合并picard中的多个文件

时间:2017-12-22 03:07:54

标签: python linux variables for-loop 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

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

我应该使用python或R来执行此操作还是继续使用shell脚本? 请指教。

1 个答案:

答案 0 :(得分: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