awk高级企业级使用案例

一、背景:

        以某物联网企业,传感器设备实时数据消费服务(Kafka-consumer)为例,调试筛选处理耗时的主题。


二、实战应用

1.1 案例1】 使用tail+awk来提取日志中的数值数据,按数值范围过滤):

原始日志格式(示例):

2018-07-11 11:49:22.413  INFO 29244 --- [TW_safeclound_elec_line_v-1531280885818] c.s.s.s.l.TimeoutInvokeMethodAspect      : 消费处理耗时: 10148 ms, method=ConsumerElecLineVDataListener.lineVData(..), args={"addr":"11111118","bid":"QQBE","cid":"BLWY","dataType":"ELE_R_LV","id":"11111118,85,117,ELE_R_LV,1531280962413","lineAB":396.77,"lineBC":395.75,"lineCA":396.42,"meterType":"117","order":"85","timestamp":1531280951758}


1.2  实战操作(我们就想提取“耗时”紧跟着的毫秒数,然后要过滤在大于10小于500范围内的):

[root@web-prod ~]# tail -f /mnt/disk1/sink/logs/sink.log|grep 耗时| awk -F ' ' '$10>200 && $10<500{print $1,$2,$6,$10,$11}'

2018-07-14 22:59:40.163 [TW_safeclound_largestDemand-1531512341755] 441 ms,

2018-07-14 22:59:40.516 [TW_safeclound_rate_v-1531512332686] 363 ms,

2018-07-14 22:59:40.665 [TW_safeclound_rate_i-1531512317893] 375 ms,

2018-07-14 22:59:40.866 [TW_safeclound_water-1531512518874] 332 ms,

...

1.3  注释:

a. 其中 awk的 -F 参数表示:日志字符串分隔符,默认为 ' ' 空格;

b. $10>100 表示我要筛选耗时大于 100 毫秒的日志;

c. {print $1,$2,$6,$10,$11} 表示打印被awk分隔后的 第1段(日期)、第2段(时间)、第6段(主题)、第10段(耗时)、第11段字符串(耗时单位);

d. 其中 $10>200 && $10<500 表示我要筛选耗时在200~500之前的消费主题;


2.1 【案例2】  (netstat+awk实现统计Linux当前TCP活跃连接的重复次数)

netstat原标准输出格式(示例):

tcp        0      0 112.215.174.131:8782    117.132.197.188:11056   ESTABLISHED off (0.00/0/0)

tcp        0      0 112.215.174.131:8782    117.132.197.188:11056   ESTABLISHED off (0.00/0/0)

....

2.2  实战操作:

[root@old-collect ~]# netstat -anop|grep ESTABLISHED|grep 8782|awk '{print $5}'|awk -F ':' '{print $1}'| awk '{a[$1]++}END{for(i in a){print i,a[i]|"sort -r -g -k2"}}'


2.2 注释:

a. 第一次awk '{print $5}' 表示使用默认“空格”分隔,获取第5列(即:客户端ip:port);

b. 第二次awk -F ':' '{print $1}' 表示指定使用“冒号”分隔,获取第1列(即:客户端ip); 

c.  第三次awk '{a[$1]++}END{for(i in a){print i,a[i] | "sort -r -g -k2"}}' ,这才是真正分组统计,即:将客户端ip不停累加,然后输出累加得到数组值,最后使用 sort -r -g -k 2 可将结果按照第2列来排序,也就是重复的次数(其中-r表示倒序,这里一定要加-g表示按常规数值排序,否则会出排序出奇怪的结果,具体请查阅shell sort -k排序之坑相关文章,大致原因是因为sort -k分隔的问题 按ascii排的)。




评论
© Saxon | Powered by LOFTER
上一篇 下一篇