1

fasta ヘッダーを分割する perl プログラムを作成しようとしています。

gi|4140243|dbj|AB022087.1|_Xenopus_laevis_mRNA_for_cytochrome_P450,_complete_cds,_clone_MC1

分割された|パーツに:

gi
4140243
dbj
AB022087.1
_Xenopus_laevis_mRNA_for_cytochrome_P450,_complete_cds,_clone_MC1

私はこれを使用してこれを行うことができますsplit:

my @hits = split(/\|/, $hits);

my ($gi, $number, $gb, $id, $name);
foreach (@hits) {
  $gi.= "$hits[0]\n";
  $number .= "$hits[1]\n";
  $gb .= "$hits[2]\n";
  $id .= "$hits[3]\n";
  $name .= "$hits[4]\n";
}

my @gi = split('\n', $gi);
my @number = split('\n', $number);
my @gb = split('\n', $gb);
my @id = split('\n', $id);
my @name = split('\n', $name);

各ヘッダー ( に含まれる$hits) の各部分は、個々の配列内の要素です。次にやりたいことは、各配列の各要素を出力して、各配列の要素[0]、各配列の要素[1]のリストを生成できるようにすることです...

これにハッシュのハッシュまたは配列の配列が必要かどうかはわかりません。

私はperlにかなり慣れていないので、提案があれば非常に役立ちます。

また、上記が私が望むものを達成するための最も巧妙な方法ではない可能性があることも認識しています-再びコメントは素晴らしいでしょう!

4

2 に答える 2

2

$hits には 1 つまたは複数のヘッダーが含まれていますか? 1 つだけの場合、変数に分割するには、次のようにします。

my ($gi, $number, $gb, $id, $name) = split(/\|/, $hits);

そして、各変数には対応する値が含まれます。

$hits に複数のヘッダーが含まれている場合は、最初に行を分割し、その後各ヘッダーをループで分割します。次に例を示します。結果はハッシュの配列になります。

my @hits = split(/\n/, $hits);
my @result;
for my hit ( @hits ) {
    my ($gi, $number, $gb, $id, $name) = split(/\|/, $hits);
    push(@result, {
        gi => $gi,
        number => $number,
        gb => $gb,
        id => $id,
        name => $name,
    });
}

もちろん、この例にはエラー チェック (- ヘッダー文字列が本当にフォーマットと一致するかどうかなど) は含まれていませんが、必要な場合は実際のアプリケーションに含める必要があります。

PS: 本当にそれから始めなければならないと思います

于 2013-04-24T11:08:32.183 に答える