- 论坛徽章:
- 5
|
本帖最后由 pitonas 于 2014-04-01 10:19 编辑
这个问题有点难
GT变成A
GTGTG => AAG- #!/usr/bin/perl
- open my $D1, 'doc1';
- my %d1;
- while (<$D1>) {
- my ( $chr, $beg, $end, $old, $new ) = split;
- push @{ $d1{$chr} },
- { B => $beg, L => ( $end - $beg + 1 ), O => $old, N => $new };
- }
- $/ = '>';
- <DATA>;
- while (<DATA>) {
- /^\w+/ and exists( $d1{$&} ) or next;
- my ( $CHR, @SEQ ) = split;
- pop @SEQ if $SEQ[-1] eq '>';
- my $SEQ = join '', @SEQ;
- for my $C ( @{ $d1{$CHR} } ) {
- my $sub = substr $SEQ, $C->{B}, $C->{L};
- $sub =~ s/$C->{O}/$C->{N}/g;
- substr( $SEQ, $C->{B}, $C->{L} ) = $sub;
- }
- print ">$CHR\n$SEQ\n";
- }
- __DATA__
- >chr1
- AGGGTGGTTGGTGGGAAACCCTGGTTCCCCCAGCCCCCGGAGACTTAAAT
- ACAGGAAGAAAAAGGCAGGACAGAATTACAAGGTGCTGGCCCAGGGCGGG
- >chr2
- AGGGTGGTTGGTGGGAAACCCTGGTTCCCCCAGCCCCCGGAGACTTAAAT
- ACAGGAAGAAAAAGGCAGGACAGAATTACAAGGTGCTGGCCCAGGGCGGG
- >chrx
- AGGGTGGTTGGTGGGAAACCCTGGTTCCCCCAGCCCCCGGAGACTTAAAT
- ACAGGAAGAAAAAGGCAGGACAGAATTACAAGGTGCTGGCCCAGGGCGGG
复制代码 |
|