使用 GNU parallel (samtools) 的管道命令
Piping commands withing GNU parallel (samtools)
我正在尝试 运行 在管道传输时并行执行命令。原因是中间文件太大放不下,只能舍弃了
我有以下代码,它们可以单独工作:
#fixmate and convert to bam
parallel --verbose --link -j 4 'samtools fixmate -O bam,level=1 {1} /home/Teste1/samtools/unsorted/{/.}.bam -@ 8' ::: /home/Teste1/star/twopassoverhang/*.fqAligned.out.sam
#sort according to coordinate
parallel --verbose --link -j 4 'samtools sort {1} -o /home/Teste1/samtools/sorted/{/.}-sorted.bam -@ 8' ::: /home/Teste1/samtools/unsorted/*.bam
#index bam files
parallel --verbose --link -j 4 'samtools index {1} -@ 8' ::: /home/Teste1/samtools/sorted/*-sorted.bam
我试过:
parallel --verbose --link -j 4 'samtools fixmate -O bam,level=1 {1} - -@ 4 | / #fixmate and output bam to nextcommand
samtools sort - - -@ 4 | / #sort bams
tee /home/Teste1/samtools/sorted/{/.}-sorted.bam | / #save sorted bam file to disk
samtools index - -@ 4' ::: /home/Teste1/star/twopassoverhang/*.fqAligned.out.sam #creates index
但我得到以下 --dry-运行:
samtools fixmate -O bam,level=1 '/homeTeste1/star/twopassoverhang/101_FRAS202421991-1a_1.fqAligned.out.sam' - -@ 4 |
samtools sort - - -@ 4 |
tee /home/Teste1/samtools/sorted/101_FRAS202421991-1a_1.fqAligned.out-sorted.bam |
samtools index - -@ 4
和 运行ning 给我:
samtools index: "-" is in a format that cannot be usefully indexed
samtools fixmate -O bam,level=1 '/home/Teste1/star/twopassoverhang/12_FRAS202372578-2r_1.fqAligned.out.sam' - -@ 4 | samtools sort - - -@ 4 | tee /home/Teste1/samtools/sorted/12_FRAS202372578-2r_1.fqAligned.out-sorted.bam | samtools index - -@ 4
[bam_sort] Use -T PREFIX / -o FILE to specify temporary and final output files
Usage: samtools sort [options...] [in.bam]
我尝试了一些其他变体,但没有成功。有什么想法吗?
这可能有效:
do_one() {
sam=""
sorted=""
#fixmate and convert to bam
samtools fixmate -O bam,level=1 "$sam" - -@ 8 |
#sort according to coordinate
samtools sort -T /home/Teste1/samtools/ - -o "$sorted" -@ 8
#index bam files
samtools index "$sorted" -@ 8
}
export -f do_one
parallel do_one {} /home/Teste1/samtools/sorted/{/.}-sorted.bam ::: /home/Teste1/star/twopassoverhang/*.fqAligned.out.sam
如果您无法 samtools
直接在管道上工作,那么您可能希望在处理完中间文件后立即删除它们:
do_one() {
sam=""
bam=""
sorted=""
#fixmate and convert to bam
samtools fixmate -O bam,level=1 "$sam" "$bam" -@ 8
#sort according to coordinate
samtools sort "$bam" -o "$sorted" -@ 8
#index bam files
samtools index "$sorted" -@ 8
# remove unsorted
rm "$bam"
}
export -f do_one
parallel do_one {} /home/Teste1/samtools/unsorted/{/.}.bam /home/Teste1/samtools/sorted/{/.}-sorted.bam ::: /home/Teste1/star/twopassoverhang/*.fqAligned.out.sam
我正在尝试 运行 在管道传输时并行执行命令。原因是中间文件太大放不下,只能舍弃了
我有以下代码,它们可以单独工作:
#fixmate and convert to bam
parallel --verbose --link -j 4 'samtools fixmate -O bam,level=1 {1} /home/Teste1/samtools/unsorted/{/.}.bam -@ 8' ::: /home/Teste1/star/twopassoverhang/*.fqAligned.out.sam
#sort according to coordinate
parallel --verbose --link -j 4 'samtools sort {1} -o /home/Teste1/samtools/sorted/{/.}-sorted.bam -@ 8' ::: /home/Teste1/samtools/unsorted/*.bam
#index bam files
parallel --verbose --link -j 4 'samtools index {1} -@ 8' ::: /home/Teste1/samtools/sorted/*-sorted.bam
我试过:
parallel --verbose --link -j 4 'samtools fixmate -O bam,level=1 {1} - -@ 4 | / #fixmate and output bam to nextcommand
samtools sort - - -@ 4 | / #sort bams
tee /home/Teste1/samtools/sorted/{/.}-sorted.bam | / #save sorted bam file to disk
samtools index - -@ 4' ::: /home/Teste1/star/twopassoverhang/*.fqAligned.out.sam #creates index
但我得到以下 --dry-运行:
samtools fixmate -O bam,level=1 '/homeTeste1/star/twopassoverhang/101_FRAS202421991-1a_1.fqAligned.out.sam' - -@ 4 |
samtools sort - - -@ 4 |
tee /home/Teste1/samtools/sorted/101_FRAS202421991-1a_1.fqAligned.out-sorted.bam |
samtools index - -@ 4
和 运行ning 给我:
samtools index: "-" is in a format that cannot be usefully indexed
samtools fixmate -O bam,level=1 '/home/Teste1/star/twopassoverhang/12_FRAS202372578-2r_1.fqAligned.out.sam' - -@ 4 | samtools sort - - -@ 4 | tee /home/Teste1/samtools/sorted/12_FRAS202372578-2r_1.fqAligned.out-sorted.bam | samtools index - -@ 4
[bam_sort] Use -T PREFIX / -o FILE to specify temporary and final output files
Usage: samtools sort [options...] [in.bam]
我尝试了一些其他变体,但没有成功。有什么想法吗?
这可能有效:
do_one() {
sam=""
sorted=""
#fixmate and convert to bam
samtools fixmate -O bam,level=1 "$sam" - -@ 8 |
#sort according to coordinate
samtools sort -T /home/Teste1/samtools/ - -o "$sorted" -@ 8
#index bam files
samtools index "$sorted" -@ 8
}
export -f do_one
parallel do_one {} /home/Teste1/samtools/sorted/{/.}-sorted.bam ::: /home/Teste1/star/twopassoverhang/*.fqAligned.out.sam
如果您无法 samtools
直接在管道上工作,那么您可能希望在处理完中间文件后立即删除它们:
do_one() {
sam=""
bam=""
sorted=""
#fixmate and convert to bam
samtools fixmate -O bam,level=1 "$sam" "$bam" -@ 8
#sort according to coordinate
samtools sort "$bam" -o "$sorted" -@ 8
#index bam files
samtools index "$sorted" -@ 8
# remove unsorted
rm "$bam"
}
export -f do_one
parallel do_one {} /home/Teste1/samtools/unsorted/{/.}.bam /home/Teste1/samtools/sorted/{/.}-sorted.bam ::: /home/Teste1/star/twopassoverhang/*.fqAligned.out.sam