如何对ID上的列进行平均?

时间:2013-12-09 21:30:32

标签: awk

我有一个包含多个ID的大型数据文件,后面跟着几列观察结果。我需要对ID的一列进行平均。我认为这可以使用awk完成,但我不知道如何设置它。

数据: ID1 ID2观察

1 15_24 -0.00002649
2 15_24 0.00001584
3 15_24 -0.00003168
1 16_2 0.00002649
2 16_2 -0.00002014
3 16_2 -0.00003058
1 12_25 0.00009636
2 12_25 -0.00007514
3 12_25 0.00003021

需要像ID2那样对ID2进行平均观察:

1 15_24 -0.00001411
2 16_2 -0.00000808
3 12_25 0.00001714

谢谢。

2 个答案:

答案 0 :(得分:2)

也许是这样:

awk 'BEGIN{ FS=" " } { cnt[$2] += $3; lincnt[$2] +=1;  } END{i=1; for (x in cnt){print i++, x, (cnt[x] /lincnt[x] )  } }' file

答案 1 :(得分:2)

如果订购相关,则此脚本可以提供帮助:

#!/usr/bin/env awk

lastItem==$2{
    observation+=$3
    observationCounter+=1
    next
}
observationCounter>0{
    print ++i" "lastItem" - "observation/observationCounter
}
{
    lastItem=$2
    observation=$3
    observationCounter=1
}
END{
    print ++i" "lastItem" - "observation/observationCounter
}