在文件中查找氨基酸序列

时间:2012-09-03 12:44:54

标签: perl

我有一个蛋白质序列的FASTA文件。我想找到 序列hxxhcxc是否存在于文件中,如果是,则打印出来 伸展。这里,h =疏水的,c =带电的,x =任何(包括剩余的)残余物/ s。 如何在Perl中执行此操作?

我能想到的是制造3个疏水,带电和所有残留物的阵列。 将每个数组与具有FASTA序列的文件进行比较。我无法想到除此之外的任何事情,特别是如何维持秩序 - 这是主要的事情。我是Perl的初学者,所以请尽可能简单地解释。

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

2 个答案:

答案 0 :(得分:2)

我不熟悉Fasta文件,但正则表达式似乎就是这样的方式。

用语言

如果您open要阅读的文件,您可以逐行处理文件,print - 仅处理与您指定的正则表达式匹配的行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

答案 1 :(得分: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";
}