Perl在String中插入特定字符

时间:2014-11-28 20:37:03

标签: perl for-loop sequence bioinformatics

我有两个字符第一个序列和第二个质量。 第二个质量显示第一个序列的质量如下。

1. ACTGACTGACTG
2. KKKKKKKKKKKK

处理(对齐)第一个序列后,它将改变如下

1. ACT-GACTG-ACTG
2. KKKKKKKKKKKK

所以我必须扩展第二个信息,如下所示(使用空格)

1. ACT-GACTG-ACTG
2. KKK KKKKK KKKK

我已经使用for循环并检查第一个字符并为第二个字符留出空格。

有没有简单易行的方法呢?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用Positional Informationsubstr

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";