我有一个蛋白质序列的FASTA文件。我想找到 序列hxxhcxc是否存在于文件中,如果是,则打印出来 伸展。这里,h =疏水的,c =带电的,x =任何(包括剩余的)残余物/ s。 如何在Perl中执行此操作?
我能想到的是制造3个疏水,带电和所有残留物的阵列。 将每个数组与具有FASTA序列的文件进行比较。我无法想到除此之外的任何事情,特别是如何维持秩序 - 这是主要的事情。我是Perl的初学者,所以请尽可能简单地解释。
PS:由于这只是一个序列,我可以简单地将内容复制到.txt文件,没有强制使用fasta文件(在这种情况下)。疏水性和带电荷是残基(氨基酸) - 有9个疏水残基和5个带电残基。正如您所提到的,它是大写单字母的氨基酸名称。所以我想要做的是在蛋白质序列(.txt文件/ fasta文件)中按顺序找到一个序列:疏水,任何,任何,疏水,带电,任何带电(hxxhcxc)。我努力重新构思我的问题 - 希望我现在好一点。
答案 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";
}