1

この形式から FASTA ヘッダーを変換する必要があります。

gi|351517969|ref|NW_003613580.1| Cricetulus griseus 配置されていないゲノム足場、CriGri_1.0 scaffold329、全ゲノム ショットガン シーケンス

これに:

NW_003613580.1 Cricetulus griseus 未配置ゲノム足場、CriGri_1.0 scaffold329、全ゲノムショットガン配列

NW の W は、他のアドレスでは C である場合があり、アンダースコアの後の桁数はさまざまです。

ID を別の形式に変更するための perl スクリプトを見つけ、それを変更しようとしていました。関連する部分:

    while( $seq = $seq_in->next_seq() ) 
{
    my $seqName = $seq->id;
    $seqName =~ s/\|/\./g; #replace pipe with dot

        $seqName =~ s/(NW\_)/$1/;   

        #$seqName =~ s/(gi\.\w*)\..*/$1/; 

        $seq->id($seqName);
    $seq_out->write_seq($seq);
}

コメントアウトされた seqname ビットがオリジナルです。giをNWに変更すると、ヘッダーの後半で読み取りが開始されることを望んでいましたが、サイコロはありませんでした。ただし、$1 をランダム テキストに変更すると、NW で置換されるため、よくわかりません。また、パイプを交換するピリオドは、論理的な理由がなくても消えているように見えます (私はそれらをなくしたいのですが)。ここで検索と置換がどのように機能するかについてのヘルプ、または少なくともいくつかのリソースをいただければ幸いです。

4

6 に答える 6

3

コンポーネントを分割します。

my @fastaHeaderComponents = split("\\|", $seq->id);

次に、それらにアクセスします。

my $accessionId = $fastaHeaderComponents[3];
my $description = $fastaHeaderComponents[4];

ヘッダーを再構築します。

my $newFastaHeader = ">$accessionId $description";
$seq->id($newFastaHeader);
于 2012-12-17T22:13:56.500 に答える
3

sedワンライナーで:

sed -r 's/^([^|]+\|){3}//;s/\|//' file

NW_003613580.1 Cricetulus griseus 未配置ゲノム足場、CriGri_1.0 scaffold329、全ゲノムショットガン配列

解決策の良い点はsed、最初の行のみなど、置換を行う行を指定し1s、オプションを使用し-iて置換をファイルに保存できることです。

sed -ri '1s/^([^|]+\|){3}//;1s/\|//' file

再説明:

s/     # Substitution, 1s/ first line only, 2s/ second line..
^      # Match the start of the line
(      # Group pattern
[^|]+  # Match one or more character that isn't a |
\|     # Match the | (escaped)
)      # End grouped pattern
{3}    # Repeat grouped pattern 3 times
/      # Replace with 
/      # Nothing
;
s/     # Substitute, 1s/ first line only..
\|     # The remaining |
/      # Replace with
/      # Nothing 
于 2012-12-17T22:14:19.370 に答える
2

おそらく、次のことが役立つでしょう:

use strict;
use warnings;
use Bio::SeqIO;

my $seq_in  = Bio::SeqIO->new( -file => 'input.fas',   '-format' => 'Fasta' );
my $seq_out = Bio::SeqIO->new( -file => '>output.fas', '-format' => 'Fasta' );

while ( my $seq = $seq_in->next_seq ) {
    my $shortened_seq = Bio::Seq->new(
        -desc       => $seq->desc,
        -display_id => ( split /\|/, $seq->id )[-1]
    );

    $seq_out->write_seq($shortened_seq);
}

入力として次のようなFASTAヘッダーを指定します。

>gi|351517969|ref|NW_003613580.1| Cricetulus griseus unplaced genomic scaffold, CriGri_1.0 scaffold329, whole genome shotgun sequence

次の出力が生成されます。

>NW_003613580.1 Cricetulus griseus unplaced genomic scaffold, CriGri_1.0 scaffold329, whole genome shotgun sequence
于 2012-12-18T02:08:28.477 に答える
1

これは、パイプ文字(オプションの空白で囲まれている)の元のヘッダーを分割し、必要なフィールドを再度結合するだけの問題です。

use strict;
use warnings;

my $header = 'gi|351517969|ref|NW_003613580.1| Cricetulus griseus unplaced genomic scaffold, CriGri_1.0 scaffold329, whole genome shotgun sequence';

$header = join ' ', (split /\s*\|\s*/, $header)[3,4];

print $header;

出力

NW_003613580.1 Cricetulus griseus unplaced genomic scaffold, CriGri_1.0 scaffold329, whole genome shotgun sequence
于 2012-12-17T22:17:07.773 に答える
1

短いバージョン: を使用して、シーケンスを配列に分割しsplitます。

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

次に、配列の要素を使用して表示する文字列を作成します。

print $parts[3], ' ', $parts[4], etc....
于 2012-12-17T22:15:00.633 に答える
0

これはうまくいくかもしれません(GNU sed):

sed -r 's/^([^|]*\|){3}(N[WC]_[0-9.]+)\|/\2/' file
于 2012-12-18T01:04:53.990 に答える