假设你的fastq测序数据里面混入了非ascii 码字符
当然,这种情况实属罕见,一般来说这种情况说明你的fastq测序数据在传输压缩解压过程中出现了不可描述的错误。
当然,你可以先判断一下自己的fastq是什么规格的编码方式:
zcat clean.1.fq.gz| head -n 40 | awk '{if(NR%4==0) printf("%s",$0);}' | od -A n -t u1 | awk 'BEGIN{min=100;max=0;}{for(i=1;i<=NF;i++) {if($i>max) max=$i; if($i<min) min=$i;}}END{if(max<=74 && min<59) print "Phred+33"; else if(max>73 && min>=64) print "Phred+64"; else if(min>=59 && min<64 && max>73) print "Solexa+64"; else print "Unknown score encoding\!";}'
或者参考:https://www.drive5.com/usearch/manual/cmdfastqchars.html
首先检查是哪些地方混入了非ascii 码字符
zcat FILE.fastq.gz | perl -e '$line = 1; while (<>) {if(/[^[:ascii:]]/) {print "LINE: $line\n$_";} $line++;}'
## Otherwise this:
perl -e '$line = 1; while (<>) {if(/[^[:ascii:]]/) {print "LINE: $line\n$_";} $line++;}' -f FILE.fastq
假设检查到:
LINE: 21410096
CCCCCGGGGGGGGGG�GGGG
可以用sed命令看看该序列的啥情况
sed -n '21410093,21410096p' FILE.fastq
假设如下:
@sequence HEADER
CTGGCTGGGAAGGGGCTGGCT
+quality HEADER
CCCCCGGGGGGGGGG�GGGG
那我们就放心的用sed命令把这条序列的4行删掉即可。
sed -n '21410093,21410096d' Fasta.fastq > repaired.fastq
但是,对双端测序不能这样任性的删除序列,可以把非ascii 码字符替换成正常的的ascii 码字符
sed '21410096s/CCCCCGGGGGGGGGG�GGGG/CCCCCGGGGGGGGGGIGGGGG' FILE.fastq >FILE.repaired.fastq