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 文件中的第二个突变),我希望在输出文件中有第四列详细说明氨基酸变化(例如(AA Gin->His ),.txt 文件中第六行的结尾)。此外,理想情况下,我希望在输出中显示非同义突变,而完全不使用“syn”和“int”。

我尝试了很多方法来做到这一点,但没有一个奏效。请问你能告诉我一种方法吗?

提前谢谢了。

最大限度

4

1 回答 1

0

假设:

  1. /note可能包含一个氨基酸变化作为最后一个元素。它必须用括号括起来并以字母开头AA,后跟一个或多个字母的序列,然后是->,然后是另一个一个或多个字母的序列。

  2. 您只对non类型感兴趣。

在您的第一个elsif中,我们必须匹配$line可能的氨基变化:

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

在您的第二个 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 回答