用perl处理下面格式内容,把中间的大写字母的固定数值的配对率测出来,根据中间配对率大小:把等于0.8的存入文件1.txt.I001 195 TTGGT 205 225E012 148 TTCGT 158 200I001 1124 TTTCTT 1151 2978E012 4 TAATGT 31 128I002
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/22 19:04:23
用perl处理下面格式内容,把中间的大写字母的固定数值的配对率测出来,根据中间配对率大小:把等于0.8的存入文件1.txt.I001 195 TTGGT 205 225E012 148 TTCGT 158 200I001 1124 TTTCTT 1151 2978E012 4 TAATGT 31 128I002
用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
用perl处理下面格式内容,把中间的大写字母的固定数值的配对率测出来,根据中间配对率大小:把等于0.8的存入文件1.txt.I001 195 TTGGT 205 225E012 148 TTCGT 158 200I001 1124 TTTCTT 1151 2978E012 4 TAATGT 31 128I002
简单写了一下,本地测试可以使用,有问题楼主联系我.这个我直接用的循环一个字符一个字符去判断的.如果有问题可以联系我
#!/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