首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GNU并行的管道命令(samtools)

使用GNU并行的管道命令(samtools)
EN

Stack Overflow用户
提问于 2021-04-21 05:34:10
回答 1查看 135关注 0票数 1

我正在尝试在管道中并行运行一个命令。原因是中间文件太大而无法保存,因此我可以将其丢弃

我有以下代码,它们可以单独工作:

代码语言:javascript
复制
#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

我试过了:

代码语言:javascript
复制
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

但是我得到了以下内容--预演:

代码语言:javascript
复制
 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

跑步给我带来了:

代码语言:javascript
复制
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]

我已经尝试了一些其他的变体,但都没有成功。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-21 12:58:54

这可能会起作用:

代码语言:javascript
复制
do_one() {
  sam="$1"
  sorted="$2"
  #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直接处理管道,那么您可能希望在使用完中间文件后立即将其删除:

代码语言:javascript
复制
do_one() {
  sam="$1"
  bam="$2"
  sorted="$3"
  #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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67186619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档