2015-02-11 43 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' 
 
          ] 
 
     };

注:上面的輸出。如果你仍然不知道,如何完成這個程序讓我知道花更多的時間