如何获取文件中唯一行的数量?

如何获取文件中唯一行的数量?

我在第 1 列中有一个标识符列表,在第 2 列中有相应的计数。该文件如下所示:

KDO65387         65
KDO65387         27
XP_006465447     971
XP_006482015     1207
XP_003630414     194
XP_002513282     500
XP_003630414     23

我想要的是,如果连续行中的第 1 列中的值匹配,则对第 2 列中的值求和。输出将如下所示:

KDO65387    92
XP_006465447    971
XP_006482015    1207
XP_003630414    217
XP_002513282    500

答案1

如果顺序很重要:

awk '!($1 in sum) {f[n++] = $1}
     {sum[$1] += $2}
     END {for (i = 0; i < n; i++) print f[i], sum[f[i]]}' < file

如果没有,您可以将其简化为:

awk '{sum[$1] += $2}
     END {for (f in sum) print f, sum[f]}' < file

答案2

使用datamash

datamash groupby 1 sum 2 <infile.txt

答案3

perl -lane '
   exists $h{$F[0]} or push @h, $F[0];
   $h{$F[0]} += $F[1];
   END { print "$_\t$h{$_}" for @h; }
' yourfile

上面的代码将按照遇到的顺序打印按键。数组维护键的顺序,而散列维护与每个键对应的总和。

相关内容