设为首页 收藏本站
查看: 1254|回复: 0

[经验分享] 【Perl】序列匹配

[复制链接]

尚未签到

发表于 2015-12-28 10:04:06 | 显示全部楼层 |阅读模式
  http://bbs.iyunv.com/viewthread.php?tid=3621368&from=favorites
  Unix技术网的牛人就是多啊~~~一
  题目:
  有文本文件含5条序列(每行一条)
GAGCATTCAGCAT
GACCATCCAGCTT
GACCATCCTGGTA
GACGATCTAGCAT
AGGCATCATGCAA
要求对这些序列两两对比  如果字符一样 就在下方标*号 以一二条序列为例,输出如下:
GAGCATTCAGCAT
GACCATCCAGCTT
**   ***  ****  *
The number of * =10
输出所有两两对比数据

  
  1.



1 chomp(@ARGV = <DATA>);
2 while ( my $str1 = shift)
3 {
4     for my $str2 ( @ARGV )
5     {
6         my $str3 = $str1 ^ $str2;
7         $str3 =~ s/[^\0]/ /g;
8         my $number = $str3 =~ s/\0/*/g;
9         print "$str1\n";
10         print "$str2\n";
11         print "$str3\n";
12         print "The number of * = $number\n\n";
13     }
14 }
15
16 __DATA__
17 1GAGCATTCAGCAT
18 2GACCATCCAGCTT
19 3GACCATCCTGGTA
20 4GACGATCTAGCAT
21 5AGGCATCATGCAA
  
  
  2.



chomp(my @data=<DATA>);
for my $i(0..$#data-1)
{
    my ($counter, $out);
    for my $j ($i+1..$#data)
    {
        substr($data[$i],$_,1) eq substr($data[$j],$_,1) ? ($counter++,$out.="*") : ($out.="") for(0..length($data[$i])-1);
        print $data[$i],"\n",$data[$j],"\n",$out,"\nThe number of * =",$counter,"\n\n";
        ($counter,$out)=();
    }
}
__DATA__
1GAGCATTCAGCAT
2GACCATCCAGCTT
3GACCATCCTGGTA
4GACGATCTAGCAT
5AGGCATCATGCAA
  

  
3.



my @array=("1GAGCATTCAGCAT",
           "2GACCATCCAGCTT",
           "3GACCATCCTGGTA",
           "4GACGATCTAGCAT",
           "5AGGCATCATGCAA");
my $line1;
while (@array>0)
{
    $line1=shift(@array);
    foreach (@array)
    {
        print $line1,"\n",$_,"\n";
        fun([split //,$line1],[split //,$_]);
    }
}
sub fun{
    my ($ref1,$ref2,$num,$out)=@_;
    while (@{$ref1}>0)
    {
        if (shift(@{$ref1}) =~ shift(@{$ref2}))
        {
            $num++;
            $out.='*';
        } else
        {
            $out.='';
        }
    }
    print $out,"\n","The number of '*' is $num\n\n";
}
__DATA__
1GAGCATTCAGCAT
2GACCATCCAGCTT
3GACCATCCTGGTA
4GACGATCTAGCAT
5AGGCATCATGCAA
  

  4.



my @a = map {chomp;[split '']} <DATA>;
for my $x (0..@a-2)
{
    for my $y ($x+1..@a-1)
    {
        my $s;
        print @{$a[$x]}, "\n", @{$a[$y]},"\n";
        print map{$a[$x][$_] eq $a[$y][$_] ? do {$s += 1;'*'} : ''} 0..$#{$a[$x]}-1;
        print "\nThe number of * = $s\n\n";
    }
}
__DATA__
1GAGCATTCAGCAT
2GACCATCCAGCTT
3GACCATCCTGGTA
4GACGATCTAGCAT
5AGGCATCATGCAA
  

  
  5.



my $sLast = <DATA>;
while (<DATA>)
{
    my $sOut = "";
    my $sCnt = 0;
    print "$sLast$_";
    for my $sLoc (0 .. length($_) -2 )
    {
        if (substr($sLast,$sLoc,1) eq substr($_,$sLoc,1))
        {
            $sOut .="*";
            $sCnt++;
        } else
        {
            $sOut .="";
        }
    }
    print "$sOut\n";
    print "The number of * =$sCnt\n\n";
    $sLast = $_;
}
__DATA__
1GAGCATTCAGCAT
2GACCATCCAGCTT
3GACCATCCTGGTA
4GACGATCTAGCAT
5AGGCATCATGCAA
  

  
6.



my @a = map {chomp;[split '']} <DATA>;
for my $x (0..@a-2)
{
    for my $y ($x+1..@a-1)
    {
        my $s;
        print @{$a[$x]}, "\n", @{$a[$y]},"\n";
        print map{$a[$x][$_] eq $a[$y][$_] ? do {$s += 1;'*'} : ''} 0..$#{$a[$x]}-1;
        print "\nThe number of * = $s\n\n";
    }
}
1GAGCATTCAGCAT
2GACCATCCAGCTT
3GACCATCCTGGTA
4GACGATCTAGCAT
5AGGCATCATGCAA
  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-157297-1-1.html 上篇帖子: Perl 编程经验 下篇帖子: perl写的一个迷宫游戏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表