shell 日志分析 获取code的统计——grep awk group功能使用

相关正则文章 正则表达式

1. grep "request:(recharge" datafile.log* | grep -v "code=200" >> recharege.log

排除code为200的

  1.1 *代表通配符

  1.2 -v 代表非含义

2. 然后用awk 进行group by操作。

 note: awk能够自动生成变量。 通过数组名+小标共同唯一确认。

例子:

我有一文本文件,例如
姓名   类型 金额
张三    1   27.43
李四    2   33.44
张三    2   55.55
丁六    1   66.66
赵七    1  77.77
我想 根据第二列——类型分别算出这个文件中所有第二列不同的(比如这里是1和2)总的金额是多少,总的行数是多少
如果是数据库,即我要的是
select sum(金额),count(*) from 表名 group by 类型;
 

  1. awk -F'<out_trade_no>|</out_trade_no>' '{types[$2]+=$3;count[$2]++}END{for(i intypes) printf"类型%s 共%d行 合计 %f\n",i,count[i],types[i]}' datafile
    1.1 更复杂的控制,-F可以用或,这样更方便的截取字符串中的某个值。其他方案可以用正则中的分组使用。高级语言(java)中的多次切割.

  1.2 printf 有占位符,但换行要加上\n

  1.3 特殊字符用 ///转义.

  1.4 awk 中的变量,和获取group by (时间函数)

       less xxx.log.2017-07-13  | awk -F ','  '{subfix=substr($1,12,5) ;iindex=$2"_"subfix;   count[iindex]++} END {print "totalTopiCount=" length(count); for (i in count ) printf "topic,%s , count,%s\n" ,i ,count[i]  }' > roecketmq.txt

   note: 1. 变量取值不需要加上 $, 否则默认就是匹配的整行$0.

             2. subfix变量要通过""隔开,才能读取到值.否则为被判断为普通字符串.

特俗字符包括 双引号, 单引号 , 中括号,大括号 []

| awk -F '\\\[\\\"|\\\"\\\]' '{print $2}'

以[" 和 "]分割.

统计,平均耗时(去掉首尾3个突刺.):

less ~/phoenix_call.tt | grep WEB_PUBLIC_V3 | grep 支付宝 | awk -F ',' '{print $3}' | sort | awk '{ items[count++]=$1} END { num=0;len=0;for ( i in items ) { if ( i >3 || i < (length(count) -3) ) { print i,items[i];num=num+ items[i];len++ } }; print num/len} '

几点提示: 1.分割. 直接用-F. 不需要在 内部再分割. 和python思路不同. 例如先,分割,然后=分割.

              2. 数组相比shell要强大,有默认值. python map默认值用 failRateMap=defaultdict(float) 或者str . 需要from collections import defaultdict 但是线上机器一般不支持.

  shell也可以实现数组和循环.

group_name_array=(${group_name_str//,/ })

比一般的变量多了 {} . (())内部可以用于计算.

    echo "应用分组列表:"

    for (( j = 0; j < ${#group_name_array[@]}; j++ )); do

        echo $((j+1))". "${group_name_array[j]}

    done

sort -g

shell 语法和java类似. 多了个 ; do,空格. python 无空格

[1] 利用awk统计Linux下最常用的20条命令的shell http://www.ha97.com/3980.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值