-3

を含むfastaアライメントファイルを解析しています

gi|216CCAACGAAATGATCGCCACACAA
gi|21-GCTGGTTCAGCGACCAAAAGTAGC

この文字列を次のように分割します。

gi|216 CCAACGAAATGATCGCCACACAA
gi|21- GCTGGTTCAGCGACCAAAAGTAGC

最初の文字列には、使用します

$aar=split("\d",$string);

しかし、それはうまくいきませんでした。私は何をすべきか?

4

3 に答える 3

3

それで、あなたはいくつかの遺伝子データを解析していて、各行にはgi|接頭辞とそれに続く数列とハイフンとそれに続くヌクレオチド配列がありますか?もしそうなら、あなたはこのようなことをすることができます:

my ($number, $nucleotides);
if($string =~ /^gi\|([\d-]+)([ACGT]+)$/) {
    $number      = $1;
    $nucleotides = $2;
}
else {
    # Broken data?
}

これは、先頭と末尾の空白がすでに削除されていることを前提としています。そうする場合は、最初のものと2番目のものを取得する必要が$number = '216'あります。$nucleotides = 'CCAACGAAATGATCGCCACACAA'$number = '216-'$nucleotides = 'GCTGGTTCAGCGACCAAAAGTAGC'

BioPerlにはfastaデータを処理するための機能がいくつかあるように見えるので、独自のツールを使用するのではなく、BioPerlのツールを使用することをお勧めします。

于 2012-12-15T07:01:00.250 に答える
2

これが私がそれを行う方法です。

#!/usr/bin/perl -Tw

use strict;
use warnings;
use Data::Dumper;

while ( my $line = <DATA> ) {

    my @strings =
        grep {m{\A \S+ \z}xms}                        # no whitespace tokens
        split /\A ( \w+ \| [\d-]+ )( [ACTG]+ ) /xms,  # capture left & right
        $line;

    print Dumper( \@strings );
}

__DATA__
gi|216CCAACGAAATGATCGCCACACAA
gi|21-GCTGGTTCAGCGACCAAAAGTAGC
于 2012-12-15T07:04:52.690 に答える
1

スペースを追加したいだけの場合(質問からはわかりません)、 replacement を使用してくださいACTGのグループ化の前にスペースを置くには:

$string =~ s/([ACTG]+)/ \1/;

または、数字とダッシュのグループ化の後にタブを追加するには:

$string =~ s/([\d-]+)/\1\t/;

これはその場で置き換えられることに注意してください$string

于 2012-12-15T16:26:03.130 に答える