2015-02-11 3 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 

Теперь я хотел бы разделить значения (дп = ххх и OS = ххх) в колонке Описание и значения в столбце онтологий (C: ххх; F = ххх; P = ххх;) на отдельные столбцов, как следующее:

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 файл или первенствует file.i бы действительно отлично, если кто-то может объяснить, как я могу достичь этого в perl. Пожалуйста, помогите мне.

Заранее спасибо

+0

Этот вопрос был бы лучше, если бы вы задали вопрос только об одном языке. Разрешение ответов на нескольких языках просто уменьшит полезность для будущих читателей, которые ищут ответ на том языке, на котором они сейчас пишут. –

ответ

0

Я видел PERL вопрос после того, как 5 лет моей Java. Я был взволнован, и я хочу сделать это упражнение. Теперь, я помню вещи, которые я сделал, и вставил код ниже. Просто обогатите тот же код для последнего столбца «Онтология» с помощью регулярного выражения и той же концепции хэша, что и вы. Вы можете сделать несколько способов в 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' 
 
          ] 
 
     };

Примечание: Выход выше. Если вы все еще не определились, как закончить эту программу, дайте мне знать, чтобы провести больше времени.

Смежные вопросы