简单问题请教:perl读取序列,给每个序列加上序列名称(即编号)然后写入新文件。
AGCCCTCTGTAGCATTTGTATGGCAGCCCTCTGTAGTATTTCTATGGCAGCCCTCTGTAGTATTTGTATGGCTCCTTAGAC...为...
AGCCCTCTGTAGCATTTGTATGGC
AGCCCTCTGTAGTATTTCTATGGC
AGCCCTCTGTAGTATTTGTATGGCTCCTTAGAC
...
为什么我的程序(见下面)运行后只生成一行>Leaf_1呢?请高手点拨一下循环哪里错了? 谢谢!
#!/usr/bin/perl -w
die "perl $0 <Input txt>\n" unless(@ARGV == 1);
open IN,$ARGV[0];
open OUT,">Output.fa";
my $count = 1;
while(<IN>){
if($_) {
print ">Leaf_$count\n";
print OUT ">Leaf_$count\n";
$count++;
}
}
close IN;
close OUT; 展开
AGCCCTCTGTAGTATTTCTATGGC
AGCCCTCTGTAGTATTTGTATGGCTCCTTAGAC
...
为什么我的程序(见下面)运行后只生成一行>Leaf_1呢?请高手点拨一下循环哪里错了? 谢谢!
#!/usr/bin/perl -w
die "perl $0 <Input txt>\n" unless(@ARGV == 1);
open IN,$ARGV[0];
open OUT,">Output.fa";
my $count = 1;
while(<IN>){
if($_) {
print ">Leaf_$count\n";
print OUT ">Leaf_$count\n";
$count++;
}
}
close IN;
close OUT; 展开
展开全部
#!/usr/bin/perl -w
die "perl $0 <Input txt>\n" unless(@ARGV == 1);
open IN,$ARGV[0];
open OUT,">Output.fa";
my $count = 1;
while(<IN>){
if($_) { #这个判断存在问题
print ">Leaf_$count\n";
print OUT ">Leaf_$count\n";
$count++;
}
}
close IN;
close OUT;
将if($_) 这个去掉再试试吧。
或者将这一句修改为 if($_=~/[ATCG]/gi)也可以
因为看你说的输出结果,文件句柄应该是打开了的,否则执行不到wile循环里面来,所以只可能是那一个判断的问题了。
die "perl $0 <Input txt>\n" unless(@ARGV == 1);
open IN,$ARGV[0];
open OUT,">Output.fa";
my $count = 1;
while(<IN>){
if($_) { #这个判断存在问题
print ">Leaf_$count\n";
print OUT ">Leaf_$count\n";
$count++;
}
}
close IN;
close OUT;
将if($_) 这个去掉再试试吧。
或者将这一句修改为 if($_=~/[ATCG]/gi)也可以
因为看你说的输出结果,文件句柄应该是打开了的,否则执行不到wile循环里面来,所以只可能是那一个判断的问题了。
更多追问追答
追问
谢谢您的回答。两种方法我都试了,但结果都还是只输出第一行就停止了,并未执行while循环。看来问题还没有找到。
追答
那你的文本文件里面能否确认没有00这样的非标准二进制字符?
建议将
if($_) {
print ">Leaf_$count\n";
print OUT ">Leaf_$count\n";
$count++;
}
这一段先修改一下,修改为:
print “$_";
看看打印的信息是什么,如果打印没有问题,那么在while之前加上$/="\n";试试
如果不能打印出信息,那么可能就是你的文件里面存在了空字符,就需要你新建一个文本文件或者将你现在的文本文件另存为一个ANSI编码的文本,注意是ANSI,也就是你另存为的时候可以看到,编码一行显示ANSI,不要是unicode或者其他的。
然后你再运行你的脚本试试。
展开全部
估计是你的输入路径有错.
将这句 open IN,$ARGV[0];
改成 open IN,$ARGV[0] or die "$! $ARGV[0]";
看看会不会报错
将这句 open IN,$ARGV[0];
改成 open IN,$ARGV[0] or die "$! $ARGV[0]";
看看会不会报错
追问
还有一种思路:我的原始文件是tab-delimited格式的:
AAGACCATTCGAGCTTATCTCTTC 1 1
ATGGAGAAGGAAATGAAGAGCAGT 1 1
......
如果用程序从上面文件里直接提取第一列(序列)数据,然后按顺序加上序列名>seq_1,2,3...是不是可以避免后续可能产生的格式困扰呢?如果可行,能帮忙写一个这样的程序吗?谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询