Python linux在picard中合并多个文件

Python linux在picard中合并多个文件,python,linux,variables,for-loop,picard,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_

我有十个目录,每个目录大约有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脚本? 请给我一些建议

为什么不使用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
为什么不使用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

我在samtools for merge中遇到了一个错误。关于添加读取组,picard似乎没有这个错误。我添加了一个选项,可以为您自动创建
I=
列表,您能看到它是否有效吗?
bamlist
对于非平凡的文件名无法正常工作。您希望使用
bamlist=$(“$folder”/*.bam)
将文件名收集到一个数组中,并使用
java-jar picard.jar MergeSamFiles“${bamlist[@]/#/I=}”O=“$folder.bam”对其进行插值
I=
前缀添加到数组中的每个项。我在samtools for merge中遇到了一个错误,关于add ReadGroup和picard似乎没有此错误我添加了一个选项,该选项应自动为您创建
I=
列表,你能看到这是否有效吗?
bamlist
对于非平凡的文件名不能正常工作。您希望使用
bamlist=$(“$folder”/*.bam)
将文件名收集到一个数组中,并使用
java-jar picard.jar MergeSamFiles“${bamlist[@]/#/I=}”O=“$folder.bam”
将前缀添加到数组中的每个项中。