以下に示す形式の大きなテキストファイルがあります-
ID SNP
FT SNP 433
FT /note="refAllele: T SNPstrains: 7083_1#5=C 7414_8#8=C 7480_8#49=C "
FT /colour=1
FT SNP 442
FT /note="refAllele: T SNPstrains: 7065_8#2=C 7065_8#94=C 7083_1#2=C 7083_1#3=C 7083_1#41=C 7083_1#42=C 7083_1#43=C "
FT /colour=1
FT SNP 460
FT /note="refAllele: T SNPstrains: 7564_8#14=C "
FT /colour=1
FT SNP 703
FT /note="refAllele: G SNPstrains: 7521_5#39=A (non-synonymous) (AA Ala->Thr) "
FT /colour=2
FT SNP 937
FT /note="refAllele: G SNPstrains: 7414_8#30=T (non-synonymous) (AA Val->Leu) "
FT /colour=2
FT SNP 1269
FT /note="refAllele: G SNPstrains: 7480_7#22=A (synonymous) 7480_7#62=A (synonymous) "
FT /colour=3
FT SNP 1804
FT /note="refAllele: T SNPstrains: 7414_7#66=A (non-synonymous) (AA Ser->Thr) 7414_8#44=A (non-synonymous) (AA Ser->Thr) 7521_6#54=A (non-synonymous) (AA Ser->Thr) "
FT /colour=2
これは私が使用したコードです-
$file="input file";
open IN, "$file";
open OUT, ">output file";
print OUT "Coordinate No of Strains AA Change\n";
while(<IN>){
if(m/^FT\s+SNP\s+(\d+)/){
$SNP=$1;
}elsif(m/^FT\s+\/note="(.*)"/){
$line=$1;
$count = ($line =~ tr/=/=/);
$line =~ m/\((AA \w+->\w+)\)\s*$/;
$change = $1 || "";
}elsif(m/^FT\s+\/colour=(\d+)/){
print OUT "$SNP $count $change\n" if $cod{$1} eq "non";
}
}
目的は、以下のような出力ファイルを作成することです(テキストファイルの上記の部分用)
Coordinates No of Strains AA Change
703 1 AA Ala->Thr
937 1 AA Val->Leu
1804 3 AA Ser->Thr
ただし、コードをテキストファイルに適用すると、エラーが発生します。23行目の連結(。)または文字列での初期化されていない値($countまたは$change)の使用。問題の行は次のとおりです。
print OUT "$SNP $count $change\n" if $cod{$1} eq "non";
エラーは、を含む行を参照しています
FT /colour=2
つまり、サンプルテキストの13行目など、非同義の突然変異を示す行。
私はプログラミングの初心者であり、このコードの大部分は私が作成したものではないことをご承知おきください。どんな助けでもいただければ幸いです!
よろしくお願いします。