免费注册 查看新帖 |

Chinaunix

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

根据score筛选序列,求帮助! (已解决,谢谢b114213903!) [复制链接]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-10-08 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-08 16:12 |只看该作者 |倒序浏览
本帖最后由 56836430 于 2015-10-09 17:15 编辑

我有两个文件,一个是align好的序列文件,fasta格式,如(a.fasta):

>lcl|Abi_c29393_g1_i1_m.53755 unnamed protein product
MIHFVLLISRQGKVRLTKWYSPYSQKERSKVIREISGVILTRGPKLCNFI
>lcl|Aco_Aquca_038_00013.1 unnamed protein product
MIHFVLLISRQGKVRLTKWYSPYTQKERTKVIRELSGVILTRGPKLCNFV
>lcl|Aco_Aquca_038_00013.2 unnamed protein product
MFL----------------------QVIRELSGVILTRGPKLCNFVEWRG

另外一个文件是以上序列每个位点的score (b.txt):
0.033658
0.034218
0.038550
0.042490
0.150432
0.214897
0.466222

8.644571
8.904594
8.971139
9.004972
9.013395
9.014203
9.014603
9.012165
9.012979
9.013093
9.013061
9.013095
9.298905
9.300411
9.300800
9.300818
9.300811
9.300889
9.300984
9.300952
9.300918
9.300968
9.300942
9.300397
9.300424
9.300866
9.301543
9.302279
9.303268
9.934049
9.978881
9.993884
9.999056
9.999716
9.999755
9.999635
9.999471
9.998696
9.998483
9.998806
9.999327
9.999733
9.999860
9.999929
9.999871
9.999862

想根据score大小来筛选序列,当score大于5时,碱基得以保留,得到以下输出文件c.fasta:
>lcl|Abi_c29393_g1_i1_m.53755 unnamed protein product
ISRQGKVRLTKWYSPYSQKERSKVIREISGVILTRGPKLCNFI
>lcl|Aco_Aquca_038_00013.1 unnamed protein product
ISRQGKVRLTKWYSPYTQKERTKVIRELSGVILTRGPKLCNFV
>lcl|Aco_Aquca_038_00013.2 unnamed protein product
------------------QVIRELSGVILTRGPKLCNFVEWRG

请大家帮个忙,应该怎么解决?

论坛徽章:
7
巳蛇
日期:2013-11-28 09:22:59天秤座
日期:2014-10-25 15:40:452015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之德黑兰石油
日期:2015-07-15 08:46:452015亚冠之平阳省
日期:2015-11-08 16:27:53白银圣斗士
日期:2015-11-14 09:58:12
2 [报告]
发表于 2015-10-08 19:29 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use Bio::SeqIO;

  4. #限制程序参数
  5. unless (@ARGV==2){
  6.         print "Usage:\t$0\tScore_file\tFasta_file\n";
  7.         sleep 3;
  8. }
  9. my $score_f=shift@ARGV;
  10. my $fasta_f=shift@ARGV;

  11. #读取Score数据
  12. my $Scores={};
  13. open (my $sc,"<$score_f") or die "Open score file failed!\n";
  14. my $n=0;
  15. while (<$sc>){
  16.         chomp;
  17.         if($_){
  18.                 $n++;
  19.                 $Scores->{$n}=$_;
  20.         }
  21. }
  22. close $sc;

  23. #读取Seq信息
  24. my $Data={};
  25. my $Fas=Bio::SeqIO->new(-file=>"$fasta_f",-format=>'fasta');
  26. while(my $seq=$Fas->next_seq()){
  27.         $Data->{$seq->id}=$seq;
  28. }
  29. $Fas->close();

  30. #提取Score值大于5的位置对应的碱基
  31. my $Seqs={};
  32. foreach my $point(sort {$a<=>$b}keys %{$Scores}){
  33.         if($Scores->{$point} > 5){
  34.                 foreach my $seq_id(keys %{$Data}){
  35.                         $Seqs->{$seq_id}.=$Data->{$seq_id}->subseq($point,$point) if $point <= $Data->{$seq_id}->length();
  36.                 }
  37.         }
  38. }

  39. #输出数据
  40. my $Out=Bio::SeqIO->new(-file=>">out.fasta",-format=>'fasta');
  41. foreach my $seq_id(keys %{$Data}){
  42.         print "Now is:\t$seq_id\n";
  43.         $Data->{$seq_id}->seq($Seqs->{$seq_id});
  44.         $Out->write_seq($Data->{$seq_id});
  45. }
  46. $Out->close();

  47. print "Finished!\n";
复制代码
Data.rar (694 Bytes, 下载次数: 13)

评分

参与人数 1信誉积分 +50 收起 理由
56836430 + 50 赞一个!

查看全部评分

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-10-08 06:20:00
3 [报告]
发表于 2015-10-09 09:51 |只看该作者
本帖最后由 56836430 于 2015-10-09 10:06 编辑

万分感谢!!!我再看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP