【发布时间】:2014-11-28 15:47:15
【问题描述】:
大家好,我一直在尝试使用 PERL 仅打印 FASTA 文件中以“MAD”或“MAN”(前 3 个 aa)开头的蛋白质序列的标题(整个 >gi 行)。但我无法弄清楚哪个部分出了问题。 提前致谢!
#!usr/bin/perl
use strict;
my $in_file = $ARGV[0];
open( my $FH_IN, "<", $in_file ); ###open to fileholder
my @lines = <$FH_IN>;
chomp @lines;
my $index = 0;
foreach my $line (@lines) {
$index++;
if ( substr( $line, 0, 3 ) eq "MAD" or substr( $line, 0, 3 ) eq "MAN" ) {
print "@lines [$index-1]\n\n";
} else {
next;
}
}
这是FASTA文件的一小部分,第一个seq的头是我要找的
>gi|16128078|ref|NP_414627.1| UDP-N-acetylmuramoyl-L-alanyl-D-glutamate:meso-diaminopimelate ligase [Escherichia coli str. K-12 substr. MG1655] MADRNLRDLLAPWVPDAPSRALREMTLDSRVAAAGDLFVAVVGHQADGRRYIPQAIAQGVAAIIAEAKDE ATDGEIREMHGVPVIYLSQLNERLSALAGRFYHEPSDNLRLVGVTGTNGKTTTTQLLAQWSQLLGEISAV MGTVGNGLLGKVIPTENTTGSAVDVQHELAGLVDQGATFCAMEVSSHGLVQHRVAALKFAASVFTNLSRD HLDYHGDMEHYEAAKWLLYSEHHCGQAIINADDEVGRRWLAKLPDAVAVSMEDHINPNCHGRWLKATEVN
【问题讨论】:
-
print "@lines [$index-1] ...没有多大意义。打印整个数组?[$index-1]应该是尝试打印上一行,或者实际上是在括号中打印 $index-1,例如如果您在第 10 行,则实际打印[9]? -
你在第 10 行,如果第 10 行满足要求,想打印第 9 行
-
那么你会想要
$prev = $index - 1; print "$lines[$prev]"。