+ -
当前位置:首页 → 问答吧 → 寻求帮助呢!根据一个文件每行的部分内容提取另一个文件的序列!!!!

寻求帮助呢!根据一个文件每行的部分内容提取另一个文件的序列!!!!

时间:2011-02-10

来源:互联网

新建文件夹.rar (35.3 KB)
下载次数: 8
2011-02-10 15:33


实现功能:
file1中fips1PMG_6 若和file2中ACS_ake_6 中的数字相同,则提取序列并保存。file2中剩下未匹配的序列也保存在另一个文件中。
即两个文件_后面的数字若相同,序列保存在一个文件,其余序列保存在另一个文件!

谢谢!
perl应该可以实现,但由于刚刚接触perl,思路不清晰,寻求帮助!

作者: Learnperl   发布时间: 2011-02-10

去看看正则吧。

作者: liuqiao007   发布时间: 2011-02-10

今天看了一天   
#!/usr/bin/perl -w
# Program name: Cutseq.pl
#===============================================================================================================

open(OUTPUT,">test") or die "can not output";
$/= ">" ;

    open(INPUT1,"file2") or die "can not find the file";
              while(<INPUT1>) {
                                                       our($title,$seqence)= split(/\n/,$_,2);
                                                                    $title=~/_(\d)+/g;
                                                                        $match1=$&;
                                                                          
                                                                          $hash{$match1}=$sequence;}

        open(INPUT2,"file1") or die "can not find the file";

                     
                           while(<INPUT2>) { our($name1,$name2,$name3)=split(/(\s)+/,$_)
                                                 $name3=~/_(\d)+/g;
                                                     $match2=$&;

                                        if ($match2=$match1) {print OUTPUT "$match1\n$sequence";
                                        }                         
                                                                 
                                                                 }

               



                                            }


只能想到这   可是run不出来  也觉得有些不对,但不知道怎么改

作者: Learnperl   发布时间: 2011-02-10

  1. #!/usr/bin/perl -w
  2. use strict;
  3. open CON, "file1";
  4. my $line;


  5. while($line = <CON>){
  6.         if($line =~ /fips1PMG_(\d+)\s/){
  7.                 #print "$1\n"       
  8.                 push(@nums,$1);
  9.         }
  10. }
  11. close CON;

  12. #print "@nums\n";
  13. open CON, "file2";
  14. open FILE, ">>same.txt" or die "Open file: same.txt  failed";
  15. open FILE2, ">>diff.txt" or die "Open file: diff.txt  failed";
  16. my $line2;
  17. my @nums;
  18. my $count = 0;
  19. my $flag = 0;
  20. while($line2 = <CON>){
  21.         if($count > 0){
  22.                 print FILE ("$line2");       
  23.                 $count --;       
  24.         }
  25.         if($flag > 0){
  26.                 print FILE2 ("$line2");       
  27.                 $flag --;       
  28.         }
  29.         if($line2 =~ /ACS_ake_(\d+)\s/){
  30.                 if(grep {/$1/} @nums){
  31.                         $count = 4;
  32.                 }else {
  33.                         $flag = 4;
  34.                 }
  35.         }
  36. }
  37. close CON;
  38. close FILE;
  39. close FILE2;
复制代码
你说的序列具体是指什么。。。。。。我就把那些字母给保存到文件了

作者: 工藤*新一   发布时间: 2011-02-10