gpt4 book ai didi

bash - 在 Unix 中合并 fastq.gz 文件

转载 作者:行者123 更新时间:2023-12-02 21:39:06 44 4
gpt4 key购买 nike

我正在使用此脚本来连接从 Samples 中读取的内容。每个子目录都有某些 R1.fastq.gz 文件和 R2.fastq.gz,我想将它们合并为一个 R1.fastq.gz 和 R2.fastq .gz 文件。

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

我想通过比较各个 fastq.gz 文件的总行数和合并文件中的总行数来验证 R1、R2 的读取是否分别串联。

 wc -l *R1*.fastq.gz (Individual files)
12832112 total

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

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

另外,有什么办法可以加快这个过程吗?我尝试使用此链接中的 & How do I use parallel programming/multi threading in my bash script?但它根本没有运行。

zcat $f/*R1*.fastq.gz | gzip >$destdir/"$fbase"_R1.fastq.gz &
zcat $f/*R2*.fastq.gz | gzip >$destdir/"$fbase"_R2.fastq.gz &

最佳答案

您正在 .gz 文件上运行 wc -l,这不是您想要的。要验证,您可以使用类似这样的内容:

zcat *R1*.fastq.gz | wc -l
zcat Sample_51770BL1_R1.fastq.gz | wc -l

尽管您可能想使用正确的校验和算法,例如与 sha256sum工具,为此。


对于并行化,您可以并行化解压缩,但不能并行化压缩,因为您正在将内容一个接一个地写入一个流(文件)中。例如这样:

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 之间并行。

另一种选择是,仅在 Rf 之间进行并行(从胃的感觉来看,这应该可以提供可实现的最佳结果,而无需向后弯腰)很多):

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

希望这有帮助!

关于bash - 在 Unix 中合并 fastq.gz 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751925/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com