我有两个字符第一个序列和第二个质量。 第二个质量显示第一个序列的质量如下。
1. ACTGACTGACTG
2. KKKKKKKKKKKK
处理(对齐)第一个序列后,它将改变如下
1. ACT-GACTG-ACTG
2. KKKKKKKKKKKK
所以我必须扩展第二个信息,如下所示(使用空格)
1. ACT-GACTG-ACTG
2. KKK KKKKK KKKK
我已经使用for循环并检查第一个字符并为第二个字符留出空格。
有没有简单易行的方法呢?
谢谢!
答案 0 :(得分:3)
使用Positional Information和substr
:
use strict;
use warnings;
my $str1 = 'ACT-GACTG-ACTG';
my $str2 = 'KKKKKKKKKKKK';
while ($str1 =~ /\W/g) {
substr $str2, $-[0], 0, ' ';
}
print "$str1\n";
print "$str2\n";
输出:
ACT-GACTG-ACTG
KKK KKKKK KKKK
答案 1 :(得分:1)
一种方法是在每次向“序列”添加短划线时为“质量”添加空格。
或者,您可以遍历序列并检查破折号的位置,并根据以下内容向Quality添加空格:
#!/usr/bin/perl
use strict;
use warnings;
my $sequence = 'ACT-GACTG-ACTG';
my $quality = 'KKKKKKKKKKKK';
my $pos = 0;
while (0 <= ($pos = index $sequence, '-', $pos)) {
substr $quality, $pos++, 0, ' ';
}
print "$quality\n";