2015-02-11 44 views
-1

perlI具有制表符分隔的文本文件,3列等下列从标签DELIM文本文件中的列中提取值

Name    Description       Ontology 
dda1  box1_homodomain gn=box1 os=homo C:Cell;C:surface;F:binding;P:toy 
dda2  sox2_plurinet gn=plu os=mouse  C:Organ;F:transport;P:carrier;P:avi 
dd13  klf4_iPSC gn=klf os=Bos   C:Cell;F:tiad;P:abs;P:digestion 

现在我想分裂值(GN = xxx和OS = XXX)在列说明在本体柱(C:XXX; F = XXX; P = XXX;)值成单独列像下面:

Name Description  gn  os  C    F    P  
dda1 box1_homodomain box1 homo Cell;surface binding   toy 
dda2 sox2_plurinet plu  mouse Organ;   transport carrier;avi 
dd13 klf4_iPSC  klf  Bos  Cell;   tiad  abs;digestion 

我想这有导出为选项卡DELIM文件或Excel file.I会很如果有人能指导我如何在perl中实现这一点,那将是非常棒的。请帮帮我。

在此先感谢

+0

如果你只问一个单一的语言,这个问题会更好。允许使用多种语言的答案只会降低未来读者使用他们正在撰写的语言寻求答案的实用性。 – 2015-02-11 21:42:42

回答

0

5年后,我看到了Perl的问题。我很兴奋,我想做这个练习。现在,我记得我做过的事情,并粘贴下面的代码。只需使用正则表达式和相同的哈希概念,为最后一列“本体”添加相同的代码。您可以在perl中执行多种方式。它可能是更多的代码。但是,我记得下面的方式。

#!/usr/bin/perl 

use Data::Dumper; 
my %output; 
open(IN, "stack.txt"); 
while(<IN>) { 
    my @nameColumns, @descriptionColumns; 
    if ($_ =~ /Name/) { 
    $ouput{'Name'} = @nameColumns; 
    $ouput{'Description'} = @descriptionColumns; 
    next; 
    } 
    my ($group1, $group2, $group3, $group4, $group5, $group6, $group7) = ($_ =~ m/(\w+)\s+(\w+)\s+(\w+)\=(\w+)\s+(\w+)\=(\w+)\s+(.*)/gi); 
    # Column 1 
    @nameColumns = @{$output{'Name'}}; 
    push(@nameColumns, $group1); 
    $output{'Name'} = [@nameColumns]; 

    # Column 2 
    #print "$group2, $group3, $group4, $group5, $group6, $group7"; 
    @descriptionColumns = @{$output{'Description'}}; 
    push(@descriptionColumns, $group2); 
    $output{'Description'} = [@descriptionColumns]; 

    # column 3 
    @column3 = @{$output{$group3}}; 
    push(@column3, $group4); 
    $output{$group3} = [@column3]; 

    # column 4 
    @column4 = @{$output{$group5}}; 
    push(@column4, $group6); 
    $output{$group5} = [@column4]; 

    #Column ... 

} 
close(IN); 
print Dumper(\%output); 

$VAR1 = { 
 
      'gn' => [ 
 
        'box1', 
 
        'plu', 
 
        'klf' 
 
        ], 
 
      'os' => [ 
 
        'homo', 
 
        'mouse', 
 
        'Bos' 
 
        ], 
 
      'Name' => [ 
 
         'dda1', 
 
         'dda2', 
 
         'dd13' 
 
        ], 
 
      'Description' => [ 
 
          'box1_homodomain', 
 
          'sox2_plurinet', 
 
          'klf4_iPSC' 
 
          ] 
 
     };

注:上面的输出。如果你仍然不知道,如何完成这个程序让我知道花更多的时间