首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Unix中合并fastq.gz文件

在Unix中合并fastq.gz文件
EN

Stack Overflow用户
提问于 2013-12-23 22:11:36
回答 1查看 5.1K关注 0票数 2

我使用这个脚本连接从Samples.Each子目录读取的数据,其中有某些R1.fastq.gz文件和R2.fastq.gz,我想将它们合并成一个R1.fastq.gz和R2.fastq.gz文件。

代码语言:javascript
复制
sourcedir=/sourcepath/
destdir=/destinationpath/

for f in $sourcedir/*
do
  fbase=$(basename "$f")
  echo "Inside $fbase"
  zcat $f/*R1*.fastq.gz | gzip >$destdir/"$fbase"_R1.fastq.gz 
  zcat $f/*R2*.fastq.gz | gzip >$destdir/"$fbase"_R2.fastq.gz

done

我希望通过比较来自单个R1文件的总行和合并文件中的总行来验证来自fastq.gz和R2的读取分别是连接的。

代码语言:javascript
复制
 wc -l *R1*.fastq.gz (Individual files)
 12832112 total

 wc -l Sample_51770BL1_R1.fastq.gz  (merged file)
 Total:10397604 

在这两种情况下,不应该数字相等吗?还是有任何其他方法来验证合并的文件是否正确完成?

另外,有没有任何方法来加快这个过程?我试着使用&从这个链接如何在bash脚本中使用并行编程/多线程?,但它根本不运行。

代码语言:javascript
复制
zcat $f/*R1*.fastq.gz | gzip >$destdir/"$fbase"_R1.fastq.gz &
zcat $f/*R2*.fastq.gz | gzip >$destdir/"$fbase"_R2.fastq.gz &
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-23 22:38:06

您正在.gz文件上运行.gz,这不是您想要的。要验证,您可以使用类似的方法:

代码语言:javascript
复制
zcat *R1*.fastq.gz | wc -l
zcat Sample_51770BL1_R1.fastq.gz | wc -l

尽管您可能希望使用适当的校验和算法(例如,使用sha256sum工具)。

至于并行化,您可以并行化解压,但不能并行压缩,因为您是一个接一个地将这些东西写入一个流(文件)中。例如:

代码语言:javascript
复制
sourcedir=/sourcepath/
destdir=/destinationpath/

for f in $sourcedir/*; do
        fbase=${f##*/}
        echo "Inside $fbase"
        for R in 1 2; do
                for xf in $f/*R$R*.fastq.gz; do
                        gzip -dc <$xf >${xf%.gz} &
                done
                wait
                cat $f/*R$R*.fastq | gzip -n9 >$destdir/"$fbase"_R$R.fastq.gz
                rm -f $f/*R$R*.fastq
        done
done

这种方法的问题是,您需要将中间解压缩结果写入磁盘(或其他临时存储),这通常比没有并行化解压缩(很多)要慢。而且,不能以这种方式在R1和R2之间进行并行处理。

另一种选择是,只在Rs和fs之间并行处理(从胃感觉来看,这应该可以提供最好的结果,而不需要过度地向后弯曲):

代码语言:javascript
复制
sourcedir=/sourcepath/
destdir=/destinationpath/

for f in $sourcedir/*; do
        fbase=${f##*/}   
        echo "Inside $fbase"
        for R in 1 2; do
                zcat $f/*R$R*.fastq.gz | gzip -n9 >$destdir/"$fbase"_R$R.fastq.gz &
        done
done
wait

希望这能有所帮助!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20751925

复制
相关文章

相似问题

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