免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 44579 | 回复: 21
打印 上一主题 下一主题

串联序列,不存在,打印gap长度 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-08-02 09:52 |只看该作者 |倒序浏览
我有一个文件(TEXT)简化如下:
>taxon1 gene2
———————gene2ATGAA1NNNNNNNNNN
>taxon1 gene3
——————gene3ACAAATTGGCTGGA---GCTGAAGAGCTATTGAAATCTAATAA1NNNNNNNNNN
>taxon1 gene4
—————gene4AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAACTCATCAATCATAA1NNNNNNNNNN
>taxon1 gene5
—————gene5AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAATCATAA1NNNNNNNNNN

>taxon2 gene1
—gene1AGCGACCCAGGTATACTTTCCGCTATTGTACAACAAAAAAACATCACTGAGCAAATTAGTAGTCAACTGGCTACCTTTTGCCAAAAATTTACGCAGGGCTTCTTAGCAACTCATCAATCATAA2NNNNNNNNNN
>taxon2 gene3
——————gene3ACAAATTGGCTGGA---GCTGAAGAGCTATTGAAATCTAATAA2NNNNNNNNNN
>taxon2 gene4
—————gene4AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAACTCATCAATCATAA2NNNNNNNNNN
>taxon2 gene5
—————gene5AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAATCATAA2NNNNNNNNNN


>taxon3 gene1
—gene11AGCGACCCAGGTATACTTTCCGCTATTGTACAACAAAAAAACATCACTGAGCAAATTAGTAGTCAACTGGCTACCTTTTGCCAAAAATTTACGCAGGGCTTCTTAGCAACTCATCAATCATAA3NNNNNNNNNN
>taxon3 gene2
———————gene2ATGAA3NNNNNNNNNN
>taxon3 gene4
—————gene4AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAACTCATCAATCATAA3NNNNNNNNNN
>taxon3 gene5
—————gene5AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAATCATAA3NNNNNNNNNN


>taxon4 gene1
—gene1AGCGACCCAGGTATACTTTCCGCTATTGTACAACAAAAAAACATCACTGAGCAAATTAGTAGTCAACTGGCTACCTTTTGCCAAAAATTTACGCAGGGCTTCTTAGCAACTCATCAATCATAA4NNNNNNNNNN
>taxon4 gene2
———————gene2ATGAA4NNNNNNNNNN
>taxon4 gene3
——————gene3ACAAATTGGCTGGA---GCTGAAGAGCTATTGAAATCTAATAA4NNNNNNNNNN

我想输出成
>taxon1
gene1-gene2-gene3-gene4-gene5
>taxon2
gene1-gene2-gene3-gene4-gene5
>taxon3
gene1-gene2-gene3-gene4-gene5
>taxon4
gene1-gene2-gene3-gene4-gene5

如果某一个位置的序列不存在,则打印空格。如果不打印空格就很容易,可是打印空格,我死活做不到啊,恳请大神指点,下面是我写的一个初步的脚本,输出没有序列!!!!

#perl test.pl
use strict;
use warnings;

my (%Len, $taxa, $gene);
my @Genepool=("gene1", "gene2", "gene3", "gene4", "gene5");
my $Genepool_ref=\@Genepool;

open(FD, "TEST")||die("Can not open the file!$!n");

$/=">";
<FD>;
while(<FD>){
    my ($head, $seq)=split(/\n/, $_,2);
    ($taxa, $gene)=split(/\s/, $head,2);
    if(grep{$gene eq $_}@Genepool){
        $Len{$gene}=length($seq);
        @Genepool=grep(/[^$gene]/,@Genepool);}
}
close(FD);

my @IDpool=("taxon1", "taxon2", "taxon3", "taxon4");
my $IDpool_ref=\@IDpool;

print "My_cat_results_is \n";
for (my $i=0; $i<=$#$IDpool_ref; $i++) {
    print '>', $IDpool[$i], "\n";
    open IN, "<TEST" || die "cannot open TEST!";
    $/=">";
    <IN>;
    while(<IN>){
        my (%hash, $head1, $seq1, $taxa1, $gene1);
        ($head1, $seq1)=split(/\n/, $_,2);
        ($taxa1, $gene1)=split(/\s/, $head1,2);
        if($IDpool[$i] eq $taxa1) {$hash{$gene1}=$seq1;}
        
        for(my $j=0; $j<=$#$Genepool_ref; $j++) {
            my $bait=$Genepool[$j];
            foreach my $k (keys %hash){
            if(exists $hash{$bait}) {print $hash{$bait};}
            else{print '-' x $Len{$bait};} } }        
    }
   
    close(IN);
    print "\n";  
}


            

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2016-08-02 10:55 |只看该作者
>taxon4 gene3
——————gene3ACAAATTGGCTGGA---GCTGAAGAGCTATTGAAATCTAATAA4NNNNNNNNNN

我想问下, 在上面的这两条记录中 哪个是位置, 哪个是与该位置对应的序列?

论坛徽章:
0
3 [报告]
发表于 2016-08-02 11:07 |只看该作者
回复 2# sunzhiguolu


>样品名称 基因名称
序列
>样品名称 基因名称
序列
>样品名称 基因名称
序列
>样品名称 基因名称
序列

为了验证输出结果,我在每个序列里加入了基因名称(gap后面),和样品排序(N前)

   

论坛徽章:
0
4 [报告]
发表于 2016-08-02 11:18 |只看该作者
序列代表比对之后的结果,所以不同样品对应的每个基因序列的长度是固定的,我的那个初步的脚本,就是第一步统计每个基因序列的长度
第二部分,遍历每个样品,打印样品序列,如果样品不存在,那就打印相应的基因序列长度的‘-’

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
5 [报告]
发表于 2016-08-02 11:57 |只看该作者
不好意思哈, 理解能力比较弱. 用你提供的一部分示例文件作为我的问题 你帮我解答下 我可以更好的理解, 谢谢.
>taxon1 gene2
———————gene2ATGAA1NNNNNNNNNN
>taxon1 gene3
——————gene3ACAAATTGGCTGGA---GCTGAAGAGCTATTGAAATCTAATAA1NNNNNNNNNN
>taxon1 gene4
—————gene4AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAACTCATCAATCATAA1NNNNNNNNNN
>taxon1 gene5
—————gene5AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAATCATAA1NNNNNNNNNN

为啥你期望的输出结果, 是下面这样的. 有啥原因吗?
>taxon1
gene1-gene2-gene3-gene4-gene5

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2016-08-02 12:01 |只看该作者
假设, 如下文本段 输出结果应该是啥样的?
>taxon1 gene2

>taxon1 gene3
——————gene3ACAAATTGGCTGGA---GCTGAAGAGCTATTGAAATCTAATAA1NNNNNNNNNN
>taxon1 gene4
—————gene4AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAACTCATCAATCATAA1NNNNNNNNNN
>taxon1 gene5
—————gene5AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAATCATAA1NNNNNNNNNN

论坛徽章:
0
7 [报告]
发表于 2016-08-02 12:04 |只看该作者
>taxon1
-------------------------------------------------------------------------------------------------------------——————gene3ACAAATTGGCTGGA---GCTGAAGAGCTATTGAAATCTAATAA1NNNNNNNNNN—————gene4AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAACTCATCAATCATAA1NNNNNNNNNN—————gene5AACAAATTGGCTGGA---GCTGAACTCTCCTTTGCCAAAAATTTACGCAGAGCTTCTTAGCAATCATAA1NNNNNNNNNN

前面的----代表是gene1,gene2的长度

论坛徽章:
0
8 [报告]
发表于 2016-08-02 12:05 |只看该作者
这是一个多基因alignment,,按顺序串联的情况

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
9 [报告]
发表于 2016-08-02 12:15 |只看该作者
你讲解的节拍太快了, 我有点跟不上啊.

论坛徽章:
0
10 [报告]
发表于 2016-08-02 12:16 |只看该作者
回复 6# sunzhiguolu


谢谢你花时间了解我的问题。
(1)首先我把各个基因的alignment   cat 到一个文件里==> TEXT (这一步不用管,下面只要处理简化文件TEXT就好了)
(2)然后从这个TEXT文件里我期望得到多基因串联的矩阵,如果某个taxon的某个基因序列不存在,就打印这个位置的gap长度"-----..."
这样,才可以保证最后得到的alignment每个序列长度都一致,方便进行下一步比较。

我现在可以得到这个多基因串联矩阵,但是不能在缺失位置打印相映基因长度gap"--------..."



   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP