FASTQ | md5 | 原始文件保存、传输、完整性检验 | 修复

 

一般在传输过程中中断,fastq就会truncate,但仍然可以用zless或者zcat打开查看。

真到万不得已的时候还是要截取可以利用的部分,然后用bbmap修复一下。

bbmap

repair.sh -Xmx14g in1=1.fq.gz in2=2.fq.gz out1=1_1.fq.gz out2=1_2.fq.gz outs=outs.fq.gz repair

 


 

最简单快速的fastq check方法

export PATH=/home/zz950/softwares/self_bin:$PATH
fastqc -t 20 -o fastqc *fq.gz

  

如果fastq文件不完整,truncated,fastqc就会报错。

Failed to process file M303P1_2.fq.gz
uk.ac.babraham.FastQC.Sequence.SequenceFormatException: Ran out of data in the middle of a fastq entry.  Your file is probably truncated
	at uk.ac.babraham.FastQC.Sequence.FastQFile.readNext(FastQFile.java:179)
	at uk.ac.babraham.FastQC.Sequence.FastQFile.next(FastQFile.java:125)
	at uk.ac.babraham.FastQC.Analysis.AnalysisRunner.run(AnalysisRunner.java:77)
	at java.lang.Thread.run(Thread.java:748)

  

 


 

Mac上安装md5sum 

brew install md5sha1sum

  


 

像fastq这样的原始文件是肯定不能丢掉的,必须保存在硬盘里或者放到ftp服务器上,以便之后再度调取分析。

fastq保存时问题不大,但因为文件巨大,传输通常需要几小时-几天,非常容易在传输过程中损毁,这时候我们就需要一种方法来检验我们下载的fastq(任何其他原始文件)是否完整。

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

安装:Macos 安装md5sum、sha1sum、md5deep、sha1deep【目前测试mac生成比较慢,不适合大数据,md5 -r类似于md5sum的功能】

brew install md5sha1sum

 

建议:任何原始文件都必须构建md5原始验证码,然后存档。

md5sum *.gz > md5.txt

传输前的批量密码生成,最好是已经跑完流程,确保fastq没问题。

md5sum */*/*fastq.gz > all.md5.txt

  

传输后的批量检测:

md5sum -c md5.txt

 


 

 

如果下载的fastq没有md5,则有几种办法:

一、用gzip检验gz的文件完整性

参考:使用gunzip命令的t参数检测fastq的gz文件完整度

gunzip -t SRR11652583_2.fastq.gz

 

二、检查配对端FASTQ数据完整性

直接计数行数即可,配对就基本没问题。

wc -l `gzcat *.gz` # 不可用
wc -l `find -name *.gz`

OSX不能直接用zcat,Linux则可以。  

对于这种大数据,最好使用C写的工具,哪些别人用perl和python写的就不要用了,速度可以气死你,Linux上的基础命令基本能胜任大部分工作。

 

 并行加速

brew install pigz
for x in *.gz; do unpigz -p 8 -c $x | wc -l && echo $x; done  

 

三、如果文件较少,可以直接看tail的read名字是否匹配。

我喜欢用for,配合文件输入输出操作,可以用,速度也不会慢。

echo "last line" > tail.name
for i in `ls *.gz`
do
echo $i >> tail.name
gzcat $i | tail -4 | grep '@' >> tail.name
echo "" >> tail.name
done

  

普通的gzcat太慢了,需要按顺序读到文件的最后一行。

这里发现了一个神器,gztool,可以给gz文件构建索引,然后直接读取最后几行,非常厉害。

echo "last line" > tail.name
for i in `ls *.gz`
do
echo $i >> tail.name
# gzcat $i | tail -4 | grep '@' >> tail.name
/Users/zxli/Downloads/rawdata/gztool/gztool -t $i | tail -4 >> tail.name
echo "" >> tail.name
done

  

 

我觉得第三种方法可以作为金标准,只要最后一个名字配对,基本不可能错。

 

确定没问题

last line
Pool111-2_23_S23_L003_I1_001.fastq.gz
@A00198:856:H5GFVDSX3:3:2678:32651:37059 1:N:0:CGGAACCCAA+TCCTCGAATC
CGGAACCCAA
+
FFFF:FFF,,

Pool111-2_23_S23_L003_I2_001.fastq.gz
@A00198:856:H5GFVDSX3:3:2678:32651:37059 2:N:0:CGGAACCCAA+TCCTCGAATC
TCCTCGAATC
+
:FF,FF,,,F

Pool111-2_23_S23_L003_R1_001.fastq.gz
@A00198:856:H5GFVDSX3:3:2678:32651:37059 1:N:0:CGGAACCCAA+TCCTCGAATC
CGCGATTCAAGTAAGCGGTGCAAAGGGG
+
FFFF:,FFFFFFF,FFFF,FFF:FFF,,

Pool111-2_23_S23_L003_R2_001.fastq.gz
@A00198:856:H5GFVDSX3:3:2678:32651:37059 2:N:0:CGGAACCCAA+TCCTCGAATC
GGACTCCAACTACTTCGATCCCAGCAAGATCCAGTTACCAGAAGAGGACTGATGGCTTACCGAGCAGGGCCTAAGAAGCATTACTCAGCC
+
FFF,:FF:FF,,F:FFFFFFF:,FF::FF,FF,F,,FFF:F:,F:,F,FFFF:F::,F:FFFFFFFFFFFFF:FFF,FF,,,,F,F,,FF

Pool111-2_23_S23_L004_I1_001.fastq.gz
@A00198:856:H5GFVDSX3:4:2678:32777:37059 1:N:0:CGGAACCCAA+TCCTCGAATC
CGGAACCCAA
+
FFFF:FFF,:

Pool111-2_23_S23_L004_I2_001.fastq.gz
@A00198:856:H5GFVDSX3:4:2678:32777:37059 2:N:0:CGGAACCCAA+TCCTCGAATC
TCCTCGAATC
+
:FF,FF,:,F

Pool111-2_23_S23_L004_R1_001.fastq.gz
@A00198:856:H5GFVDSX3:4:2678:32777:37059 1:N:0:CGGAACCCAA+TCCTCGAATC
TGCCTGTTCGGTACGCAACTTTAGCATA
+
:FFFFF:FFFFFFFFFFFF:,F:FFFFF

Pool111-2_23_S23_L004_R2_001.fastq.gz
@A00198:856:H5GFVDSX3:4:2678:32777:37059 2:N:0:CGGAACCCAA+TCCTCGAATC
GTCGGGCGCCGGCGGCTTTGGTGACTCTAGATAACCTCGGGCCGATCGCACGCCCCCCGGGGCGGCGACGACCCATTCGAACGTCTGCCC
+
FFFFFFFFFFFFFFFF,FFFFFFFF,FF,FF:::FFFFFFFFFF:FFFFFFFF:F:FFF,FFFFFFFFFFFFFFF,:FFFF:FFFFFFFF

  

同一批数据,名字基本一样,就是lane和read R1/R2不一样。

R1和R2的长度不必一样! 

 

posted @ 2022-09-07 16:49  Life·Intelligence  阅读(2736)  评论(0编辑  收藏  举报
TOP