如何找到相同的行并合并值?

如何找到相同的行并合并值?

我有以下表格分隔表:

NM_000057   0
NM_000059   0
NM_000060   0
NM_000061   0
NM_000062   0
NM_000063   0
NM_000063   0
NM_000063   3
NM_000063   2
NM_000063   0
NM_000063   0
NM_000063   0
NM_000064   0
NM_000065   0
NM_000066   0
NM_000067   0
NM_000068   0
NM_000069   0
NM_000070   0

我想查找第一个值,如果有多个相等的值,我想合并它并添加第二列中的值。在示例中:

NM_000057   0
NM_000059   0
NM_000060   0
NM_000061   0
NM_000062   0
**NM_000063 5**
NM_000064   0
NM_000065   0
NM_000066   0
NM_000067   0
NM_000068   0
NM_000069   0
NM_000070   0

谢谢你!

答案1

使用‘awk’,

awk '{seen[$1]+=$2} END{for (x in seen) print x, seen[x]}' infile > outfile

在上面的 awk 命令中,主要这个 'seen[$1]+=$2' 部分完成工作,变量 $1 作为键字段在匹配键时对第二列的值求和。

最后,我们循环遍历以 x 为变量的 seen 数组,并打印第一列中看到的键,然后打印每个键通过 seen[x] 得出的总结果。

答案2

最近发现GNU 数据粉碎我要加入

datamash groupby 1 sum 2 < input

如果您的数据尚未排序,您可能需要添加选项-s,如果它由其他空格(而不是制表符)分隔,请添加-W

相关内容