从标签DELIM文本文件中的列中提取值
问题描述:
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中实现这一点,那将是非常棒的。请帮帮我。
在此先感谢
答
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'
]
};
注:上面的输出。如果你仍然不知道,如何完成这个程序让我知道花更多的时间
如果你只问一个单一的语言,这个问题会更好。允许使用多种语言的答案只会降低未来读者使用他们正在撰写的语言寻求答案的实用性。 – 2015-02-11 21:42:42