请用Perl语言写一个脚本实现按行分片(某些行具有统一的标识符)并实现一定目的
我有一个.fasta文件类似这样一行带“>”标记名字的标题行和下面不定长度的DNA序列行,DNA序列行按照每行n个碱基分成了m行,然后又是一行标题行,再序列m行,要实现将...
我有一个.fasta文件类似这样一行带“>”标记名字的标题行和下面不定长度的DNA序列行,DNA序列行按照每行n个碱基分成了m行,然后又是一行标题行,再序列m行,要实现将标题行下面的m行DNA序列变成一行,该怎么写Perl脚本?求大神解答,fasta文件类似这样,但不是每行只有这么多个
>scaffold1
ACGTAGCTAGCTAGCT
CGTCGATCTAGCTAGC
>scaffold2
TCGATGCTAGCTAGTC
TCGATCGATGCTAGCT
TCGATCGATCTCGATC
GGATGCT
>scaffold3
TGATAGTCGATCGTAG
TCGATCGATGCTATGC
TCGATCGATG
希望转换格式后成:
>scaffold1
ACGTAGCTAGCTAGCTCGTCGATCTAGCTAGC
>scaffold2
TCGATGCTAGCTAGTCTCGATCGATGCTAGCTTCGATCGATCTCGATCGGATGCT
>scaffold3
TGATAGTCGATCGTAGTCGATCGATGCTATGCTCGATCGATG 展开
>scaffold1
ACGTAGCTAGCTAGCT
CGTCGATCTAGCTAGC
>scaffold2
TCGATGCTAGCTAGTC
TCGATCGATGCTAGCT
TCGATCGATCTCGATC
GGATGCT
>scaffold3
TGATAGTCGATCGTAG
TCGATCGATGCTATGC
TCGATCGATG
希望转换格式后成:
>scaffold1
ACGTAGCTAGCTAGCTCGTCGATCTAGCTAGC
>scaffold2
TCGATGCTAGCTAGTCTCGATCGATGCTAGCTTCGATCGATCTCGATCGGATGCT
>scaffold3
TGATAGTCGATCGTAGTCGATCGATGCTATGCTCGATCGATG 展开
1个回答
展开全部
#!/usr/bin/perl
use strict;
open FILE,"<input.fasta";
foreach my $line (<FILE>) {
chop($line) while ($line =~ /[\r\n]/); #去除末尾换行符
if ($line =~ /^>/) { # 如果是标题行
print "\n$line\n";
}
else {
print $line;
}
}
print "\n";
close FILE;
追问
有一个小小的问题啊,他会在第一个标题行前面加一个空白行,可以去掉吧?
追答
加一个flag吧,最开始为0,在循环里面,如果是标题行的判断里,判断flag==0则置flag=1,并打印"$line\n",否则打印"\n$line\n"。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询