美文网首页生物信息编程
🐫[perl]批量提取某个目录下所有文档的特定列,并整合到一个表

🐫[perl]批量提取某个目录下所有文档的特定列,并整合到一个表

作者: 郑宝童 | 来源:发表于2019-11-07 16:44 被阅读0次

    任务:

    批量提取某个目录下所有文档的特定列.
    如:提取"E:\test"下所有maf.txt结尾的文件的Entrez_Gene_Id列,并合并输出到result.txt

    perl代码实现:

    use strict;
    use warnings;
    ####需要输入的变量
    my $ExpPath="E:\\test";####文件目录 [修改]
    my $OutputPath="E:\\test\\result.txt"; ####结果整合结果存放的位置 [修改]
    #####输入变量结束
    
    opendir DIR,$ExpPath or die "can't open   $ExpPath \n";
    my $sum_Sampel=0;###样本量计数
    my @Exp="";###存储输出信息
    my $Expi=0;
    while(my $file=readdir(DIR)){
        if($file=~/\.maf.txt$/){                            #提取相应的文件: 例如:maf.txt [修改]
        $sum_Sampel++;
        $Expi=0;
        if($sum_Sampel==1){
        open (IN,"$ExpPath/$file") or die "can't open  $file \n";
        $Exp[$Expi]=$file;
        <IN>;
        <IN>;       #三个IN是为了 跳过开头三行
        <IN>;
        my $col=0;
        while(chomp(my $line=<IN>)){
        my @name=split(/\t/,$line);
        my $len=@name;
        for(my $i=0;$i<$len;$i++){
        if($name[$i] eq "Entrez_Gene_Id"){                     # Entrez_Gene_Id改成列名 [修改]
        $Expi++;
        $Exp[$Expi]=$name[$i];
        $col=$i;
        last;
        }
        }
        if ($col !=0){
        last;
        }
        }
        while(<IN>){
        $Expi++;
        chomp($_);
        my @name=split(/\t/,$_);
        $Exp[$Expi]=$name[$col];
        }
        close(IN);
        }   #end while
    
        
        if($sum_Sampel>1){
        open (IN,"$ExpPath/$file") or die "can't open  $file \\n";
        $Exp[$Expi]="$Exp[$Expi]\t$file";
        <IN>;
        <IN>;
        <IN>;
        my $col=0;
        while(my $line=<IN>){
        chomp($line);
        my @name=split(/\t/,$line);
        my $len=@name;
        for(my $i=0;$i<$len;$i++){
        if($name[$i] eq "Entrez_Gene_Id"){                                        # Entrez_Gene_Id改成列名     [修改]                                     
        $Expi++;
        $Exp[$Expi]="$Exp[$Expi]\t$name[$i]";
        $col=$i;
        last;
        }
        }
        if ($col !=0){
        last;
        }
        }
        while(<IN>){
        $Expi++;
        chomp($_);
        my @name=split(/\t/,$_);
        $Exp[$Expi]="$Exp[$Expi]\t$name[$col]";
        }
        close(IN);
        }
        }   #end while
        }
        print "'\$Expi' is $Expi";
      open (OUT,">$OutputPath") or die "can't open  $OutputPath \\n";
      for(my $j=0;$j<=$Expi;$j++){
      print OUT "$Exp[$j]\n";
      }
      close(OUT);
    
    
    
    

    相关文章

      网友评论

        本文标题:🐫[perl]批量提取某个目录下所有文档的特定列,并整合到一个表

        本文链接:https://www.haomeiwen.com/subject/aepvbctx.html