必须将基因组质量转换为 ASCII 时,如何使用 Regex s/ 进行搜索和替换?
How to search and replace using Regex s/ when having to convert genome quality to ASCII?
我正在努力使用 Perl 上的 Phred+33 将基因组读取质量从 fasta.qual 文件(40、39、38 等)转换为 ASCII,但无法让它工作。我正在尝试通过 s///g 运算符来完成。我将我的品质存储在哈希中,我正在尝试 运行 以下循环:
foreach $key (keys %qual) {
$value = $qual{$key};
$qual{$key} =~ s/($value)/$map{}/g;
}
%地图包含:
%map = ("0 " => "\!",
"1 " => "\"",
"2 " => "\#",
"3 " => "$",
"4 " => "\%",
"5 " => "\&",
"6 " => "\'",
"7 " => "\(",
"8 " => "\)",
"9 " => "\*",
"10 " => "\+",
"11 " => "\,",
"12 " => "\-",
"13 " => "\.",
"14 " => "\/",
"15 " => "0",
"16 " => "1",
"17 " => "2",
"18 " => "3",
"19 " => "4",
"20 " => "5",
"21 " => "6",
"22 " => "7",
"23 " => "8",
"24 " => "9",
"25 " => "\:",
"26 " => "\;",
"27 " => "\<",
"28 " => "\=",
"29 " => "\>",
"30 " => "\?",
"31 " => "\@",
"32 " => "A",
"33 " => "B",
"34 " => "C",
"35 " => "D",
"36 " => "E",
"37 " => "F",
"38 " => "G",
"39 " => "H",
"40 " => "I",);
然而它改变了这个:
>FR5ON5F01DQM9C
37 37 37 37 37 37 40 40 40 40 40 40 40 40 40 40 40 35 35 35 40 40 40 40 40 40 40 40 40 40
40 40 40 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 36 36 30 30 30 30
30 38 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
进入这个:
>FR5ON5F01DQM9C
散列内的所有元素都会发生这种情况。应用 s/// 运算符时我做错了什么吗?
目标是将所有内容转换成 .fastq 文件。
谢谢!
my $alt = join "|", map quotemeta, sort { length{$b} <=> length($a) } keys %map;
my $re = qr/($alt)/;
$str =~ s/$re/$map{}/g;
回想起来,这并没有考虑到空格。按顺序阅读会更有意义,然后使用
$seq = join "", map $map{$_}, split ' ', $seq;
我正在努力使用 Perl 上的 Phred+33 将基因组读取质量从 fasta.qual 文件(40、39、38 等)转换为 ASCII,但无法让它工作。我正在尝试通过 s///g 运算符来完成。我将我的品质存储在哈希中,我正在尝试 运行 以下循环:
foreach $key (keys %qual) {
$value = $qual{$key};
$qual{$key} =~ s/($value)/$map{}/g;
}
%地图包含:
%map = ("0 " => "\!",
"1 " => "\"",
"2 " => "\#",
"3 " => "$",
"4 " => "\%",
"5 " => "\&",
"6 " => "\'",
"7 " => "\(",
"8 " => "\)",
"9 " => "\*",
"10 " => "\+",
"11 " => "\,",
"12 " => "\-",
"13 " => "\.",
"14 " => "\/",
"15 " => "0",
"16 " => "1",
"17 " => "2",
"18 " => "3",
"19 " => "4",
"20 " => "5",
"21 " => "6",
"22 " => "7",
"23 " => "8",
"24 " => "9",
"25 " => "\:",
"26 " => "\;",
"27 " => "\<",
"28 " => "\=",
"29 " => "\>",
"30 " => "\?",
"31 " => "\@",
"32 " => "A",
"33 " => "B",
"34 " => "C",
"35 " => "D",
"36 " => "E",
"37 " => "F",
"38 " => "G",
"39 " => "H",
"40 " => "I",);
然而它改变了这个:
>FR5ON5F01DQM9C
37 37 37 37 37 37 40 40 40 40 40 40 40 40 40 40 40 35 35 35 40 40 40 40 40 40 40 40 40 40
40 40 40 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 36 36 30 30 30 30
30 38 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
进入这个:
>FR5ON5F01DQM9C
散列内的所有元素都会发生这种情况。应用 s/// 运算符时我做错了什么吗?
目标是将所有内容转换成 .fastq 文件。
谢谢!
my $alt = join "|", map quotemeta, sort { length{$b} <=> length($a) } keys %map;
my $re = qr/($alt)/;
$str =~ s/$re/$map{}/g;
回想起来,这并没有考虑到空格。按顺序阅读会更有意义,然后使用
$seq = join "", map $map{$_}, split ' ', $seq;