perlI有制表符分隔的文本文件,包含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文件。如果有人可以指导我如何在perl中实现这一点,那将是非常好的。请帮帮我。
提前致谢
答案 0 :(得分:0)
我在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'
]
};
&#13;
注意:输出如上。如果您还没有弄明白,如何完成此计划让我知道要花更多时间