免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
打印 上一主题 下一主题

跪求高手帮助解决perl问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-12-13 20:14 |只看该作者
回复 10# huang6894


    那就是真实文件,只是一部分。源文件我上传了,你看看。在命令行里输入Perl XX.pl  路径\Orthologs-msu.txt Allseq.fa   这样测试,对不对?

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
12 [报告]
发表于 2014-12-14 10:46 |只看该作者
回复 11# 弦断有谁听1053476508

不好意思,帮不到你,我这里测试没有问题~
   

论坛徽章:
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
13 [报告]
发表于 2014-12-15 09:35 |只看该作者
请提供完整的fa文件

论坛徽章:
0
14 [报告]
发表于 2014-12-15 14:16 |只看该作者
Allseq.fa文件有200g,太大没法上传,只能发测试文件。大神,我有重新上传了测试文件,编辑了帖子,麻烦您给看看,或许是过程步骤我没有向您描述清楚。回复 12# huang6894


   

论坛徽章:
0
15 [报告]
发表于 2014-12-15 14:17 |只看该作者
Allseq.fa文件有200g,太大没法上传,只能发测试文件,大神,我新上传了测试文件,您再看看。回复 13# b114213903


   

论坛徽章:
0
16 [报告]
发表于 2014-12-15 14:27 |只看该作者
还请大家不吝赐教!

论坛徽章:
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
17 [报告]
发表于 2014-12-15 22:07 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;

  3. my $file=shift @ARGV || "orthol-msu.txt";

  4. open (IN,"<$file") or die "Open $file failed!\n";
  5. my %hash=();
  6. while (my $line=<IN>){
  7.         my @line=split /\t/,$line;
  8.         my $value=$line[4];
  9.         $line[4]=~s/\s/\n/g;
  10.         print "$line[0]\n";
  11.        
  12.         ##第一步##
  13.         open (OUT,">$line[0].txt");
  14.         foreach my $item(@line){
  15.                 print OUT "$item\n";
  16.         }
  17.         close OUT;
  18.        
  19.         ##第二步##
  20.         $hash{$line[0]}=$value;
  21. }
  22. close IN;
  23. foreach my $id(keys %hash){
  24.         print "ID:\t$id\nValue:\t$hash{$id}\n";
  25. }
  26. print "Finished!\n";
复制代码
回复 16# 弦断有谁听1053476508
明天给你第三步的

   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00
18 [报告]
发表于 2014-12-16 05:06 |只看该作者
本帖最后由 chenhao392 于 2014-12-16 05:15 编辑

可能的小老乡你好.

既然你是洛阳上的本科,我猜我们多半 算半个老乡。我也有高中时代的哥们在那所大学读本科。看在我们是老乡的份上,看在你不停的积极讨论的份上,我也就不潜水了。程序大概给你写完了,请查收。
我理解你的需求是:根据OrthoMCL计算出的同源基因名称,从不同的植物的基因序列 (200 Gb)中,拿到OrthoMCL提到的基因,并把一个同源基因组的存放在一个文件里。


但是!
每一次提问前,请一定要想一想自己的问题是否问的够有效率。这次你忽略了几个比较关键的信息:
1. Step 1-3 似乎是你自己的programming想法。其实不妨把整个需求描述出来,也许别人有更好的办法呢? 比如我的code,用到了hash of hash.

2. 一个基因会有多个isoforms,你的ortholog 信息是gene的,而你提供的Allseq.fa 是根据isoform的,直接的ID当然一个match都没有。我的code假设你的Allseq.fa 里的isoform是加了 . (点) 或者 _(下划线) 的。这cover了玉米,水稻和拟南芥,并不一定cover了所有的情况。所以,这个代码你可能还要改。


3. Again, 一个gene有多个isoforms,要选哪一个呢?这要看你的研究课题了。我知道通常会选最长的那一个。

4. 请以后尽量学习用linux,你用windows 下载的Allseq.fa 的换行符,需要多用一个chop,将来记不住自己的代码干了什么的话,会出错。

5. 最重要的是,你真的理解你提供的文件么?
       Quote
  1. 其中要求生成的ID文件如下:
  2. APK_ORTHOMCL0
  3. 416
  4. 2
  5. rice sorghum
  6. LOC_Os04g04140
  7. LOC_Os05g29160
  8. LOC_Os10g02640
复制代码
在我看来,数字416 是说这个ortholog在这些物种里一共有多少个copy,数字 2是说有多少个物种里有这个ortholog,在上文中是rice(水稻)和 sorghum(高粱)。我的程序已经考虑了这一点,会从类似 LOC_Os04g04140 的位置读取。

请用严谨认真的态度来做科研和在版面上提出问题。将来perl玩熟练的话,也请回到版面上帮助别人。

        此致,
你的半个老乡: chenhao392


run
  1. perl orthoMCL_picker.pl orthol-msu.txt Allseq.fa
复制代码
code
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. my %id;
  5. my %seq;

  6. #load orthoMCL result from MSU
  7. open FILE, "<$ARGV[0]" or die "$!\n";
  8. while(<FILE>){
  9.     chomp;
  10.     #skip header line
  11.     if($. == 1){
  12.         next;
  13.     }

  14.     #get ortholog groups
  15.     my ($orthoID,undef,$speciesCount,@line)=split(/\s+/,$_);
  16.     for(my $i=$speciesCount;$i<scalar(@line);$i++){
  17.         $id{$orthoID}{$line[$i]}="";
  18.         $seq{$line[$i]}="";
  19.     }

  20. }
  21. close FILE;


  22. #scanning through the seq
  23. my $switch=0;
  24. my $id="";
  25. open FILE, "<$ARGV[1]" or die "$!\n";
  26. while(<FILE>){
  27.     chomp;
  28.     chop;
  29.     if($_ =~ />(.*?)\s.*/){
  30.         $switch =0;
  31.         $id=$1;
  32.         $id=~s/[\._].*//;
  33.         if(defined $seq{$id}){
  34.             $switch = 1;
  35.         }
  36.     }
  37.     elsif($_ =~ /^[ATCGatcg]/ && $switch == 1){
  38.         $seq{$id}.=$_;
  39.     }

  40. }
  41. close FILE;

  42. foreach my $orthoID(keys %id){
  43.     open OUT, ">$orthoID.fa" or die "$!\n";
  44.     foreach my $id(keys %{$id{$orthoID}}){
  45.         print OUT ">$id\n$seq{$id}\n";
  46.     }
  47.     close OUT;
  48. }
复制代码

论坛徽章:
0
19 [报告]
发表于 2014-12-16 11:16 |只看该作者
太感谢了!大神,你怎么知道我在洛阳上的啊,我在河科大上的本科。你写的东西我认真看了,很受启发呢。不嫌弃的话交个朋友吧,我q1053476508回复 18# chenhao392


   

论坛徽章:
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
20 [报告]
发表于 2014-12-16 12:32 |只看该作者
回复 18# chenhao392


    200G的fa文件,这样读,能行么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP