今天,需要求得两个状态的比率, 在经过痛苦的手动记录和计算,之后,突然意识到可以用awk,对log文件进行操作。
log 文件: test.log
以下是log 文件中的一部分数据,需要计算 state_2 / (state_2+state_3)
STAT state_1 0
STAT state_2 12345
STAT state_3 23456
STAT state_4 139739
STAT state_1 0
STAT state_2 124656
STAT state_3 185312
STAT state_4 139739
最后写出的awk命令是:
awk '/state_2 | state_3/ {print $3}' /var/log/test.log |
awk '{if(FNR%2 == 1) state2 = $1;
if(FNR%2 ==0 && (state2+$1) !=0 ){ i++; state3 = $1; sum += state2/(state2+state3)}
}END
{print "avg = ", avg = sum/i}'
不知道还有没有更简单的写法。