用perl处理
用perl处理
下面格式内容,把中间的大写字母的固定数值的配对率测出来,
根据中间配对率大小:把等于0.8的存入文件1.txt.
I001 195 TTGGT 205 225
E012 148 TTCGT 158 200
I001 1124 TTTCTT 1151 2978
E012 4 TAATGT 31 128
I002 17 AATTGACT 29 54
E023 5 AATTGACT 17 128
I003 16 TCGACTTAAT 35 65
E034 44 TGGACATAAT 63 200
配对率定义:设最佳匹配长度为m bp,若有k个碱基完全配对,则配对率为k/m.例如第一组序列配对率为:4/5=0.8,第二组为:2/6=0.3,第二组为:2/6=0.8
结果如下:
1.txt中有
I001 195 TTGGT 205 225
E012 148 TTCGT 158 200
I003 16 TCGACTTAAT 35 65
E034 44 TGGACATAAT 63 200
简单写了一下,本地测试可以使用,有问题楼主联系我.这个我直接用的循环一个字符一个字符去判断的.如果有问题可以联系我
#!/usr/bin/perl -w
use strict;
die "perl $0 \n" unless(@ARGV == 1);
open IN,$ARGV[0]; #打开信息存放的列表文件
open OUT,">1.txt";
my $SeqA;
my $SeqB;
while($SeqA = ){
#next if($Seq !/^I/); #如果文件是楼主提供的标准格式,也就是第一行就是I00什么的,那么这一行就不用打开,否则把前面#号去掉吧
$SeqB = ; #连续读入两行信息
chomp $SeqA;
chomp $SeqB;
my @tmpA = split /[ \t]+/,$SeqA; #切割两行信息到数组
my @tmpB = split /[ \t]+/,$SeqB;
my $Same = 0; #用于计数有多少个比对上了
for(my $i=0;$i不知道0.79算0.7还是0.8?呵呵,我也编了个程序,是按具体的值算的,主要是处理不了。 大侠,你把0.78到0.82都按0.8再帮我处理下吧,弄了一下午了,没弄出来。不好意思啊 现在才上来,搞定就好了。