假设我有一个包含以下信息的txt文件:
id;nucleotides
seq1;230
seq2;40
seq1;50
seq3;30
所以最后我想要一个这样的文件(计算每个id的总核苷酸):
id;nucleotides
seq1;280
seq2;40
seq3;30
在Perl或UNIX中有什么快速的方法吗?
答案 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]
-完成所有文件行的总和后,以“键;值”格式打印哈希值