Chinaunix

标题: error统计,求助高手 [打印本页]

作者: gnpdelove    时间: 2016-02-18 11:39
标题: error统计,求助高手
公司里目前用的solaris
cat gap1.dat

O:460
E:1181
E:1182
E:1181
PASS:1451
PASS:1562
O:3572
PASS:1376
PASS:1857
PASS:1894
PASS:2003
O:461
E:7665
E:7665
E:1181
E:1182
PASS:3484
E:1188
E:1183
E:1181

对gap1.dat有如下操作,gap1.dat是一台设备某一天的log,每天生成的log均有不同
以带有SS关键字的那一行为分割线,对O:460 E:1181等error进行统计,这些error只是一部分大概有300多个,每天出现的都不一样
有几点要求:
1. 连续带有pass的行合并成一行
   pass行可能出现在第一行,也可能出现在最后一行,或者两者都出现,也有可能不出现
2. pass行和下个pass行之间出现的重复error算一件,比如
O:460
E:1181
E:1182
E:1181
PASS:1451
PASS:1562
上面的E:1181算一件
PASS:2003
O:461
E:7665
E:7665
E:1181
E:1182
PASS:3484
上面的E:7665算一件
3.最后我需要的结果是:
O:460   1
E:1181  3
E:1182  2
O:3572  1
O:461   1
E:7665  2
E:1188  1
E:1183  1

作者: leijskg    时间: 2016-02-18 13:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: haooooaaa    时间: 2016-02-18 13:53
  1. awk 'function count(){for(i in b)a[i]++;delete b}!/SS/{b[$0]}/SS/{count()}END{count();for(i in a)print i,a[i]}' file
复制代码

作者: zxy877298415    时间: 2016-02-18 14:48
  1. awk -v RS="PASS:[0-9]+" 'NF>0{for(i=1;i<=NF;i++) {if(!a[$i]) b[$i]++;a[$i]++}delete a }END{for(i in b) print i,b[i]}' file
复制代码
回复 1# gnpdelove


   
作者: gnpdelove    时间: 2016-02-18 16:51
你好,能不能解释一下每一步的含义,求指导,谢谢回复 3# haooooaaa


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2