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