1

大きな .txt ファイルがあり、その一部を以下に示します -

ID   SNP
FT   SNP             102
FT                   /note="refAllele: C SNPstrains: 4395_8_10=A 4395_8_7=A 4395_8_9=A     "
FT                   /colour=1
FT   SNP             1299
FT                   /note="refAllele: A SNPstrains: 6437_8_6=T (non-synonymous) (AA Gin->His) "
FT                   /colour=2
FT   SNP             2134
FT                   /note="refAllele: C SNPstrains: 4395_8_12=T "
FT                   /colour=1
FT   SNP             3205
FT                   /note="refAllele: C SNPstrains: 6437_8_12=T (synonymous) "

私もこのスクリプトを持っています(私は書いていません)-

$cod{1} = "Int";
$cod{2} = "non";
$cod{3} = "syn";
$cod{4} = "stop";

$file = "Whole.pl";
open IN, "$file";
open OUT, ">whole2";
print OUT "Coordinate   Type    Strains\n";

while (<IN>) {

    if (m/^FT\s+SNP\s+(\d+)/) {

        $SNP = $1;      
    }
    elsif (m/^FT\s+\/note="(.*)"/) {

        $line = $1;
        $count = ($line =~ tr/=/=/);
    }
    elsif (m/^FT\s+\/colour=(\d+)/) {

        if ($cod{$1}) {

            print OUT "$SNP $cod{$1} $count\n";
        }
        elsif (!$cod{$1}) {

            print OUT "$SNP colour $1 $count\n";
        }
    }
}    

新しいファイルを作成します。上記のデータの場合、これを作成します-

Coordinate  Type    Strains 
102          Int    3
1299         non    1
2134         Int    1
3205         syn    1

私はperlとプログラミング全般に非常に慣れていないため、このスクリプトが何をしているのかを理解できたと思います。ただし、同義ではない変異を示す菌株 (.txt ファイルの 2 番目の変異など) については、出力ファイルに 4 番目の列を追加して、アミノ酸の変化の詳細を示したいと思います (例: (AA Gin->His )、.txt ファイルの 6 行目の末尾)。また、理想的には、出力に非同義の突然変異を表示し、「syn」と「int」を完全に除外したいと考えています。

これを行うためにさまざまな方法を試しましたが、うまくいきませんでした。これを行う方法を教えてください。

よろしくお願いします。

マックス

4

1 に答える 1

0

仮定:

  1. 最後/noteの要素としてアミノ酸の変更が含まれている場合があります。括弧で囲み、文字 で始まりAA、その後に 1 つまたは複数の文字のシーケンスが続き、その後に が続き->、その後に 1 つまたは複数の文字の別のシーケンスが続く必要があります。

  2. タイプだけに興味がありnonます。

最初のでは、可能なアミノ変化に対してelsifを一致させる必要があります。$line

}elsif(m/^FT\s+\/note="(.*)"/){
        $line=$1;
        $line =~ m/\((AA \w+->\w+)\)\s*$/;
        $change = $1 || "";
        ...;

2 番目の elsif では、次の場合にのみ出力$cod{$1}nonます。

}elsif(m/^FT\s+\/colour=(\d+)/){
   print OUT "$SNP $count $change\n" if $cod{$1} eq "non";
   # inner if/else not needed any longer.
}

また、上部のテーブル ヘッダーを変更する必要があります。

print OUT "Coordinate   Strains Change\n";

列を手動で再調整する必要があります。

これは次のようなものを出力します

Coordinate      Strains Change
1299    1       AA Gin->His

入力例について。

于 2012-10-17T22:14:58.553 に答える