新手求助关于perl--如何打开fsa文件以及提取数据

2025-04-27 01:31:35
推荐回答(1个)
回答1:

首先,文件名应该用双引号"或单引号'引,而不是反引号`引。
其次,不应该是一行算一个序列吧,应该是遇到顶头的>算一个序列吧。
因此,要统计序列数目:
#!/usr/bin/perl

$filename = "sequence.fsa";
open(FILE, $filename) || die("Couldn't read file $filename\n");
while ($line = ){
if($line =~ /^>/ ){
$seq_num ++;
}
}
print $seq_num;
close FILE;

要想打印gi后的编号:
#!/usr/bin/perl

$filename = "sequence.fsa";
open(FILE, $filename) || die("Couldn't read file $filename\n");
while ($line = ){
if($line =~ /^>gi|([0-9]+)/ ){
print ($1 . "\n");
}
}
close FILE;

输出到新文件可以使用命令行重定向符>,例如:perl 程序名.pl >list.txt
或在程序中打开然后写文件,类似 收获者888 的代码:
#!/usr/bin/perl

$filename = "sequence.fsa";
$outname = "list.txt";
open(FILE, $filename) || die("Couldn't read file $filename\n");
open(OUTFILE, $outname) || die("Couldn't open file $outname\n");
while ($line = ){
if($line =~ /^>gi|([0-9]+)/ ){
print OUTFILE ($1 . "\n");
}
}
close FILE;
close OUTFILE;

以上代码中文件名都是相对路径,即运行时当前目录,需要将那个sequence.fsa拷到当前目录再执行。

另外,如果不能运行,请将出错提示贴上来,便于分析。