比较匹配
时间:2010-08-12
来源:互联网
大家好:
我有一个文件:内容是
>ab1
123
234
567
987
>ab2
345
678
123
654
789
等等,还有另外一个文件,内容是
>bc
123456789
我想要这两个文件去匹配,最后得到一个百分比。 比如说ab1里面有4行,让这4行去和bc的这一行去匹配,匹配上的就$count++; 然后再用总行去减去匹配上的个数 也就是$count,再除以总行得到想要的百分比。
比如ab1里面,总行为4行,匹配的为3个,那么计算方法就是: (5-4) / 5.后面的都是这样,以此类推。
我想了多种方法,不过思路还是陷到子程序里了。写的特别乱,而且还不对,呵呵 希望大家能帮帮。谢谢。
open (FH,'E:\task\805\9mer\1.fasta') || die "$!";
open (OUT,'>E:\task\805\9mer\2.fasta') || die "$!";
my ($title,$line,%seq,$count,$count1,$count2,@array,@array2);
while (<FH>) {
chomp;
if (/^>/) {
$title = $_;
# print OUT "$title\n";
}
else {
$seq{$title} .= $_;
@array = &distance($_);
foreach my $ninemer (@array) {
# @array2 = split (/\s+/,$ninemer);
print OUT $array2[2];
}
}
}
# open (IN,'E:\task\805\9mer\GAG.fasta') || die "$!";
# my $string = <IN>;
# if ($string =~ /$ninemer/) {
# $count2++;
# }
#
# }
# my $count = ($count1 - $count2) / $count1;
# printf OUT "%5.2f", $count;
#}
# }
#}
sub distance {
my ($string) = @_;
my $num = 0;
my $len = 9;
my @array1;
while(1){
my $str = substr ($string,$num,$len);
last if (length($str) < 9);
# print OUT "$str\n";
push @array1,$str;
$num += 9;
}
return "@array1\n";
}
我有一个文件:内容是
>ab1
123
234
567
987
>ab2
345
678
123
654
789
等等,还有另外一个文件,内容是
>bc
123456789
我想要这两个文件去匹配,最后得到一个百分比。 比如说ab1里面有4行,让这4行去和bc的这一行去匹配,匹配上的就$count++; 然后再用总行去减去匹配上的个数 也就是$count,再除以总行得到想要的百分比。
比如ab1里面,总行为4行,匹配的为3个,那么计算方法就是: (5-4) / 5.后面的都是这样,以此类推。
我想了多种方法,不过思路还是陷到子程序里了。写的特别乱,而且还不对,呵呵 希望大家能帮帮。谢谢。
open (FH,'E:\task\805\9mer\1.fasta') || die "$!";
open (OUT,'>E:\task\805\9mer\2.fasta') || die "$!";
my ($title,$line,%seq,$count,$count1,$count2,@array,@array2);
while (<FH>) {
chomp;
if (/^>/) {
$title = $_;
# print OUT "$title\n";
}
else {
$seq{$title} .= $_;
@array = &distance($_);
foreach my $ninemer (@array) {
# @array2 = split (/\s+/,$ninemer);
print OUT $array2[2];
}
}
}
# open (IN,'E:\task\805\9mer\GAG.fasta') || die "$!";
# my $string = <IN>;
# if ($string =~ /$ninemer/) {
# $count2++;
# }
#
# }
# my $count = ($count1 - $count2) / $count1;
# printf OUT "%5.2f", $count;
#}
# }
#}
sub distance {
my ($string) = @_;
my $num = 0;
my $len = 9;
my @array1;
while(1){
my $str = substr ($string,$num,$len);
last if (length($str) < 9);
# print OUT "$str\n";
push @array1,$str;
$num += 9;
}
return "@array1\n";
}
作者: leigh111 发布时间: 2010-08-12
搞生物的啊~~~
作者: shilin320 发布时间: 2010-08-12
回复 shilin320
对。其实我就想比较序列之间的距离
对。其实我就想比较序列之间的距离
作者: leigh111 发布时间: 2010-08-12
我的程序就只能写这么点,不知道该怎么写了。没思路了。
use strict;
use warnings;
open (FH,'E:\task\805\9mer\1.txt) || die "$!";
open (OUT,'>E:\task\805\9mer\2.txt) || die "$!";
my ($title,$line,%seq,$count,$count1,$count2,@array,@array2);
my $string;
while ($line = <FH>) {
chomp $line;
if ($line =~ /^>/) {
$title = $_;
# print OUT "$title\n";
}
if ($line =~ /^\w{3}$/) {
$count1++;
$string = "123456789";
$count2++ if ($string =~ /$line/);
}
}
# my $count = ($count1 - $count2) / $count1;
# printf OUT "%5.2f", $count;
#}
# }
#}
use strict;
use warnings;
open (FH,'E:\task\805\9mer\1.txt) || die "$!";
open (OUT,'>E:\task\805\9mer\2.txt) || die "$!";
my ($title,$line,%seq,$count,$count1,$count2,@array,@array2);
my $string;
while ($line = <FH>) {
chomp $line;
if ($line =~ /^>/) {
$title = $_;
# print OUT "$title\n";
}
if ($line =~ /^\w{3}$/) {
$count1++;
$string = "123456789";
$count2++ if ($string =~ /$line/);
}
}
# my $count = ($count1 - $count2) / $count1;
# printf OUT "%5.2f", $count;
#}
# }
#}
作者: leigh111 发布时间: 2010-08-12
回复 leigh111
握手,同行~不过我算入门级的。师兄都比较厉害。
握手,同行~不过我算入门级的。师兄都比较厉害。
作者: shilin320 发布时间: 2010-08-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28