从 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'
]
};
注:上面的输出。如果你还不明白,如何完成这个程序让我知道花更多的时间
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'
]
};
注:上面的输出。如果你还不明白,如何完成这个程序让我知道花更多的时间