我有一个包含多个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
谢谢。
答案 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)
如果订购相关,则此awk脚本可以提供帮助:
#!/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
}