0

我有一个蛋白质序列的FASTA文件。我想查找文件中是否存在序列 hxxhcxc,如果是,则打印拉伸。这里,h=疏水,c=带电,x=任何(包括剩余的)残基/s。如何在 Perl 中做到这一点?

我能想到的是制作 3 个阵列——疏水的、带电的和所有的残基。将每个数组与具有 FASTA 序列的文件进行比较。除此之外,我想不出什么,尤其是如何维持秩序——这是主要的。我是 Perl 的初学者,所以请让解释尽可能简单。

PS:由于这只是一个序列,我可以简单地将内容复制到 .txt 文件,没有强制使用 fasta 文件(在这种情况下)。疏水和带电残基(氨基酸) - 有 9 个疏水残基和 5 个带电残基。正如您提到的,它是大写单字母的氨基酸名称。所以我想做的是在蛋白质序列(.txt文件/fasta文件)中按顺序找到一个序列:疏水,任何,任何,疏水,带电,任何,带电(hxxhcxc)。我努力重新提出我的问题——希望我现在好一点了。

4

2 回答 2

2

我对 Fasta 文件不熟悉,但正则表达式当然看起来像是要走的路。

用言语

如果您open要读取文件,则可以逐行处理文件,print仅 -ing 那些if与您指定的正则表达式匹配的行。

在代码中

use strict;
use warnings;
use autodie;

open my $fh, '<', 'file.fasta';           # Open filehandle in read mode

while ( my $line = <$fh> ) {              # Loop over line by line

    print $line                           # Print line if it matches pattern
      if $line =~ /h..hc.c/;              # '.' in a regular expression matches
                                          # (almost) anything
}

close $fh;                                # Close filehandle
于 2012-09-03T12:52:01.243 回答
0

所以,你必须决定哪些是“疏水”氨基酸,但让我们从 V(aline)、I(soleucine)、L(eucine)、F、W 或 C 开始。

带电荷的氨基酸是 E、D、R 或 K。使用它你可以定义一个正则表达式(你会在下面看到它)

如果您只是在文本文件中有整个序列,请像这样解析它:

#!/usr/bin/perl

open(IN, "yourfile.txt") || die("couldn't open the file: $!");

$sequence = "";

while(<IN>) {
   chomp();
   $sequence .= $_;
}

if($sequence =~ /[VILFWC]..[VILFWC][EDRK].[EDRK]/) {
  print "Found it!\n";
} else {
  print "Not there\n";
}
于 2013-06-20T06:04:51.033 回答