perl 脚本将phred33 转换为phred64

今天用fastx_tookit 时遇到问题, 我的fastq 文件的碱基质量值格式为phred33, 而fastq_tookit 默认碱基质量值的格式为phred64,

所以报错了,提示我的fastq文件中包含非法的碱基质量值,逗号

逗号的在ascii 码表中对应的十进制数字为44, 按照phred 33 格式,其对应的碱基质量值为11,如果按照phred64处理的化, 其质量值为-20,此时就会报错,

所以需要将碱基质量给位phred64 格式的,我没找到现有工具, 只能自己写了,虽然很慢, 但是能解决问题。代码如下:

 1 #!/usr/bin/perl 
 2 use warnings;
 3 use strict;
 4 
 5 =pod
 6 将phred33 转换为phred64
 7 =cut
 8 
 9 my ($fastq) = @ARGV;
10 my $raw_quality = 33;
11 my $new_quality = 64;
12 open FASTQ, $fastq or die "Can't open $fastq\n";
13 while (my $id = <FASTQ>) {
14     my $seq     = <FASTQ>;
15     my $des     = <FASTQ>;
16     my $quality = <FASTQ>;
17 
18     chomp($id);
19     chomp($seq);
20     chomp($des);
21     chomp($quality);
22 
23     my @fmt_quality = map {chr(ord($_) - $raw_quality + $new_quality)} split //, $quality;
24     $quality = join "", @fmt_quality;
25     print qq{$id\n$seq\n$des\n$quality\n};
26 }
27 close $fastq;

将格式转换后,再运行fastx_tookit 中的fastx_quality_stats 就不会报错了