从 tab delim 文本文件中的列中提取值

Extracting values from columns in tab delim text file

perl我有制表符分隔的文本文件,其中包含 3 列,如下所示

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)和 Ontology 列中的值(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 

我希望这必须导出为 tab delim 文件,或者 excel file.I 如果有人可以指导我如何在 perl 中实现它,那将是非常棒的。请帮助我。

提前致谢

我 Java 5 年后看到了 perl 问题。我很兴奋,我想做这个练习。现在,我记得我做过的事情并粘贴了下面的代码。只需使用正则表达式和相同的哈希概念丰富最后一列 'Ontology' 的相同代码即可。你可以在 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'
                           ]
        };

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