gpt4 book ai didi

awk - 使用 awk 对每个唯一 ID 求和或求平均值

转载 作者:行者123 更新时间:2023-12-04 20:39:29 25 4
gpt4 key购买 nike

谁能告诉我如何使用 awk 来计算两个单独列的总和或每个唯一 ID 的一列的平均值。

输入

chr1    3661532 3661533 0.0 5   0   chr1    3661529 3662079 NM_01011874     
chr1 3661534 3661535 0.2 5 1 chr1 3661529 3662079 NM_01011874
chr1 3661537 3661538 0.0 5 0 chr1 3661529 3662079 NM_01011874
chr1 3661559 3661560 0.0 6 0 chr1 3661529 3662079 NM_01011874
chr2 4661532 4661533 0.0 8 0 chr1 4661532 4661533 NM_00175642
chr2 6661534 6661535 0.2 5 2 chr1 6661534 6661535 NM_00175642
chr2 2661537 2661538 0.0 5 0 chr1 2661537 2661538 NM_00175642
chr2 9661559 9661560 0.0 7 0 chr1 9661559 9661560 NM_00175642

每个唯一 ID 的输出(总和 $5 $6)

NM_01011874 21 1 
NM_00175642 25 2

或每个唯一 ID 平均 4 美元

NM_01011874 0.0476
NM_00175642 0.08

另外,如果您能分解解决方案的组成部分,我将不胜感激。我是一名分子生物学家,受过最少的生物信息学培训。

最佳答案

每个 id 第 5 列和第 6 列的总和:

awk '{sum5[$10] += $5; sum6[$10] += $6}; END{ for (id in sum5) { print id, sum5[id], sum6[id] } }' < /tmp/input 
NM_00175642 25 2
NM_01011874 21 1

解释:$10 是 id 字段,$5 和 $6 是第 5 列和第 6 列。我们构建了 2 个数组来对第 5 列和第 6 列求和(由字符串索引,因此我们可以使用 id 字段)。处理完所有行/记录后,我们遍历数组键(id 字符串),并打印该数组索引处的值。

每个 id 第 4 列的平均值:

awk '{sum4[$10] += $4; count4[$10]++}; END{ for (id in sum4) { print id, sum4[id]/count4[id] } }' < /tmp/input 
NM_00175642 0.05
NM_01011874 0.05

解释:与求和示例非常相似。我们为每个 id 保留第 4 列的总和,以及为每个 id 看到的记录计数。最后,我们遍历 id 并打印总和/计数。

我对 awk 做的不多,我发现 Perl 更适合小型脚本。但是this看起来是一个很好的起点。有指向更多页面的链接以及示例脚本。

关于awk - 使用 awk 对每个唯一 ID 求和或求平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19671396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com