我正在尝试使用Perl将重复的行组合起来,运气不佳。我的制表符分隔文本文件的结构如下(为了便于阅读而添加了空格):
Pentamer Probability Observed Length
ATGCA 0.008 1 16
TGTAC 0.021 1 16
GGCAT 0.008 1 16
CAGTG 0.004 1 16
ATGCA 0.016 2 23
TGTAC 0.007 1 23
我希望通过添加三个数字列来组合重复的行,因此包含“ATGCA”的行现在看起来像这样:
ATGCA 0.024 3 39
任何想法/帮助/建议将不胜感激!谢谢!
答案 0 :(得分:1)
#!/usr/bin/perl
use warnings;
use strict;
my %hash;
while(<>) {
my @v = split(/\s+/);
if (defined $hash{$v[0]}) {
my $arr = $hash{$v[0]};
$hash{$v[0]} = [$v[0], $arr->[1] + $v[1],
$arr->[2] + $v[2], $arr->[3] + $v[3]];
} else {
$hash{$v[0]} = [@v];
}
}
foreach my $key (keys %hash) {
print join(" ", @{$hash{$key}}), "\n";
}
答案 1 :(得分:1)
这是另一种选择:
use Modern::Perl;
my %hash;
while ( my $line = <DATA> ) {
my @vals = split /\s+/, $line;
$hash{ $vals[0] }->[$_] += $vals[ $_ + 1 ] for 0 .. 2;
}
say join "\t", $_, @{ $hash{$_} } for sort keys %hash;
__DATA__
ATGCA 0.008 1 16
TGTAC 0.021 1 16
GGCAT 0.008 1 16
CAGTG 0.004 1 16
ATGCA 0.016 2 23
TGTAC 0.007 1 23
输出:
ATGCA 0.024 3 39
CAGTG 0.004 1 16
GGCAT 0.008 1 16
TGTAC 0.028 2 39