如何计算每个ID的总数

时间:2018-08-14 08:22:55

标签: perl unix average

假设我有一个包含以下信息的txt文件:

id;nucleotides
seq1;230
seq2;40
seq1;50
seq3;30

所以最后我想要一个这样的文件(计算每个id的总核苷酸):

id;nucleotides
seq1;280
seq2;40
seq3;30

在Perl或UNIX中有什么快速的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试

#!/usr/bin/perl
use strict;
use warnings 'all';
use feature 'say';

my %count;

while (<DATA>) {
        chomp;
        next if $. == 1; # skip header
        my ($id, $nuc) = split(/;/, $_);
        $count{$id} += $nuc;
}

if (scalar (keys ( %count ) ) > 0) {
        say "id;nucleotides";
        foreach (sort keys %count) {
                say "$_;$count{$_}";
        }
}

__DATA__
id;nucleotides
seq1;230
seq2;40
seq1;50
seq3;30

答案 1 :(得分:2)

确认:

awk -F';' 'NR==1;(NR>1){A[$1]+=$2} END{for(i in A)print i";"A[i]}' file

1)-F';'-;字符作为分隔符

2)NR==1;-打印第一行(标题)

3)(NR>1){A[$1]+=$2}-如果不是第一行,则将值加到$ 1哈希(a)键上

4)END{for(i in A)print i";"A[i]-完成所有文件行的总和后,以“键;值”格式打印哈希值