免费注册 查看新帖 |

Chinaunix

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

再求个perl程序,本人分不多,但是需要紧急,望各位帮助小弟! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-27 17:10 |只看该作者 |倒序浏览
5可用积分
这个问题好像前边问过但是现在格式不一样了啊

有这样的些位置信息
  1. BGIBMGA000062-TA         nscaf1071        1239531
  2. BGIBMGA000064-TA         nscaf1071        1313194
  3. BGIBMGA000129-TA         nscaf1108        1283079
  4. BGIBMGA000140-TA         nscaf1108        1773552
  5. BGIBMGA000154-TA         nscaf1108        2355076
  6. BGIBMGA000155-TA         nscaf1108        2429759
  7. BGIBMGA000201-TA         nscaf1299        349886
  8. BGIBMGA000202-TA         nscaf1375        7946
  9. BGIBMGA000360-TA         nscaf1681        45390
  10. BGIBMGA000362-TA         nscaf1681        90916
  11. BGIBMGA000367-TA         nscaf1681        262818
  12. BGIBMGA000372-TA         nscaf1681        801566
  13. BGIBMGA000381-TA         nscaf1681        1125109
  14. BGIBMGA000384-TA         nscaf1681        1165828
  15. BGIBMGA000394-TA         nscaf1681        1732614
复制代码
有这样的一些  位置信息,第一列是基因的名字上,第二列是nscaf的名称,第三列是起点,是这个基因比对对到ncaf上的位点
现在我的需要是把 起点上游2000bp  到下游500bp的碱基序列(-2000~+500)     从ncaf上提取出来

nscaf格式如下:
  1. >nscaf100 /length=4083 /lengthwogaps=4073
  2. TCTCTTAAAGGCTGCAAGTCCTAAGTCATCTTTTAAAATACGCGACATGGTGCTATCTTCATCTCCCGAG
  3. ATAAAATCTTTTGCTTTCGGACAGGATTTCTTCGAATTCTTTTCCTTACTGCTTTGACCACCTTTTTCGT
  4. ACGAACACTACGTGAACGGCCAGATCTCATTCCCGATCCTGCGGACAGAATGGAAAGCAGTCGACGTCGC
  5. CCAAAACACGTCTCTCGGATCCTCCCGATCCACTAACGGTGCTTTTAGGTACTCCAAGCACCGGTCACCG
  6. TTCTCGTCGAACCCGTCGCTTGCGACGAAGGGCTCGACGAGTAAATTAACTCTCAGACACA...........................
  7. .................

  8. >nscaf1000 /length=20507 /lengthwogaps=15885
  9. CTCCAAAGATTTATTGGATAATGGTTTTTTTGTTGTTGCTTCCGAAGATGTACTAAAACTTACATAAGTC
  10. CTTATTTTTGACAAGAAAGACACTTATGCACCTCTTTTAAACTTTATTTGGAGAGGTGCATGTCATGACG
  11. TGAAAACTCAGAGTAGGTGAGTTCGTGCCATAAGAGATTGGTCGCCAATGATTTTGGTATGCGCATTCTA
  12. TAAAAGCAGAGATCCGAGGTGGTAGATTTTAGCTCTTGTTCAAGGTATGGGGTAAAAAGTAGACTAAAAT
  13. ATCACAGGTCTGAAGAACAATTTGAAGAACAATGCCCGTTTGAATTTT.......................................
  14. .....................................
复制代码
提取出的格式最好是这样的:
>pro1/BGIBMGA000062-TA
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>pro2/BGIBMGA000064-TA
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>pro3/BGIBMGA000129-TA
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
..........................................................
...........................................................

我把一些格式传为附件了,因为分数有限,就只给最快,最准确的了!

格式.zip

1.28 MB, 下载次数: 161

最佳答案

查看完整内容

输出文件是 'out.fa'.在 Debian 下已经调试通过。

论坛徽章:
0
2 [报告]
发表于 2011-03-27 17:10 |只看该作者
本帖最后由 longbow0 于 2011-03-27 19:40 编辑

输出文件是 'out.fa'.
在 Debian 下已经调试通过。

  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. use Bio::SeqIO;

  5. # Read all seqs into a hash
  6. my $seqi = Bio::SeqIO->new(
  7.         -file => 'nscaf格式.fa',
  8.         -format => 'fasta',
  9. );

  10. my $rh_seqs;

  11. while (my $seq = $seqi->next_seq) {
  12.         $rh_seqs->{$seq->id} = $seq;
  13. }

  14. # Output seqs
  15. my $seqo = Bio::SeqIO->new(
  16.         -file => ">out.fa",
  17.         -format => 'fasta',
  18. );

  19. my $i = 1;

  20. open(FH, "位置信息1.txt") or die "Error: '位置信息1.txt' $!\n";

  21. while (<FH>) {
  22.         next if /^\s*$/;
  23.        
  24.         my ($geneid, $seqid, $pos) = split /\s+/;

  25.         print 'Gene: ', $geneid, 'Seq: ' . $seqid, "\n";
  26.        
  27.         # 提示不存在的 seqid
  28.         unless ( defined $rh_seqs->{$seqid} ) {
  29.             warn 'Seq ', $seqid, "does NOT exost!\n";
  30.             next;
  31.         }
  32.         my $gene_str =  $rh_seqs->{$seqid}->subseq($pos-2000, $pos+500);
  33.        
  34.         my $sseq = Bio::Seq->new(
  35.         -id => 'pro' . $i . '/' . $geneid,
  36.         -seq => $gene_str,
  37.         );
  38.        
  39.         $seqo->write_seq($sseq);

  40.         $i++;
  41. }

  42. close FH;
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-03-28 01:41 |只看该作者
回复 2# longbow0


    哥们高手!

论坛徽章:
0
4 [报告]
发表于 2011-03-28 01:56 |只看该作者
回复 2# longbow0


     学习了!

论坛徽章:
0
5 [报告]
发表于 2011-03-28 12:01 |只看该作者
open(FH,'E:\task\nscaf格式.fa') || die "$!";
open(IN,'E:\task\位置信息.txt') || die "$!";
open(OUT,'>E:\task\nscaf.fasta') || die "$!";

my ($title,@array,%seq);
while (<FH>) {
         chomp;
      if (/^>(nscaf\d+)/) {
         $title = $1;
      }
      else {
         $seq{$title} .= $_;
      }
}
close FH;
my ($up,$down,$num);
while (<IN>) {
   chomp;
   @array = split/\s+/,$_;

   if ($seq{$array[1]}) {
       $num++;
       $up = substr ($seq{$array[1]},$array[2]-2000,2000);
       $down = substr ($seq{$array[1]},$array[2],500);
        print ">pro.$num\/$array[0]\n";
        print $up.$down,"\n";
   }
}

论坛徽章:
0
6 [报告]
发表于 2011-03-28 14:29 |只看该作者
回复 5# leigh111


    谢谢了啊,哥们!

论坛徽章:
0
7 [报告]
发表于 2011-03-28 15:23 |只看该作者
学习了、
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP