使用index从perl中的数组中提取子字符串

时间:2013-07-12 20:42:47

标签: arrays perl indexing extract

我想使用perl从数组中提取30个字符的子串,使用另一个由索引组成的数组,我想从每行开始子串。例如,第1行从第21位开始提取30个字符,从第5行开始提取第2行,第3行......等等这可能吗?我知道使用固定索引很容易,但我从未尝试过使用存储在单独数组中的索引。 非常感谢。

例如,在我的情况下,数组1将包含字符串:

ATGTCAAATCCAGAAAGCTTGAAAAAACAGGTTGAACCTCCTGGTTACAATGAGTTATTTATGGTGGAAGATGTTTGTAATGTGGACCTAGAGCAGGGACT
TGATTTGTGTAAGCCTGAAAAGGTAAACAAACAATCTCAACGATCTCGACAATCCCGACAATCCCTCTTTACCAACACCATTAAGCCTCAAAAAGACAAGA
TGAATATTAAAACAAATAAAATAAAAGAGTTTTTAAATGACCTTTTTACTGAATTTTCTAAATTCCACAATAGCTATTATCCTAATGGAAGAATTTCTACT
CAGGACAAATCTCGATGGGTCTTGCTTATTATTTGGTCTATTATCACTATTTTAACAATAGACAAGAAATTTAAAATAAAAGAGTCATATTTAGAATGGAT
AGGTGAAAATCAGTCCCACAGTGAAATTTGGGGGCCTATTGTTATTTATGTTGGCTTATTCATACTCTTATTGTCTGCTTTTAACTGTACGTTTCCTTCAC

并且数组二包含索引,我想从每个30个字符串子串中提取,例如

21
32
15
7
17

留下输出:

AAAAAACAGGTTGAACCTCCTGGTTACAAT
AATCTCAACGATCTCGACAATCCCGACAAT
ATAAAATAAAAGAGTTTTTAAATGACCTTT
AATCTCGATGGGTCTTGCTTATTATTTGGT
CAGTGAAATTTGGGGGCCTATTGTTATTTA

1 个答案:

答案 0 :(得分:2)

让我们假设我们有一个字符串和一个偏移量:

my $string = "ATGTCAAATCCAGAAAGCTTGAAAAAACAGGTTGAACCTCCTGGTTACAATGAGTTATTTATGGTGGAAGATGTTTGTAATGTGGACCTAGAGCAGGGACT";
my $offset = 21;
my $length = 30;

然后我们可以获得所需的子字符串,如

substr $string, $offset, $length;

但是如果我们有一个数组@strings和一个相应的数组@offsets,那么对于 i -th元素我们有:

substr $strings[$i], $offsets[$i], $length;

当我们遍历数组的所有索引(0 .. $#strings)时,我们可以得到每个子字符串。