linux日志分组统计,Shell中常见的日志统计方法

linux日志分组统计,Shell中常见的日志统计方法

2023年7月10日发(作者:)

linux⽇志分组统计,Shell中常见的⽇志统计⽅法前⾯我发布过"Hadoop兮,杀鸡别⽤⽜⼑,python+shell实现⼀般⽇志⽂件的查询、统计", 需要结合python, 可能还是有⼀定的门槛, 现将shell部分剥离出来. 举例⼀些最基本的⽇志统计⽅法.(1)查看⽂件more 查看⽇志tail -n 100 查看的最后100⾏(2)匹配统计cat *.log | grep "ERROR" |wc -l统计在*.log中出现ERROR的⾏数, 去掉最后⼀个管道(即: cat *.log | grep "ERROR" )可以查看具体匹配的是哪些⾏, ⼤⽂件不建议这样做.(3)正则表达式匹配统计cat *.log | grep ".*Append (http:.*?) to .*"查看*.log中匹配正则表达式 .*Append (http:.*?) to .*的⾏, 为什么括号前要加斜杠呢? 这是shell中正则表达式⽐较特殊的地⽅, 括号还有其他个别符号前需要加斜杠.(4)将匹配正则表达式的内容抽取出来, 排重, 再统计.cat * |grep "Append" |sed 's/.*Append (http:.*?) to .*/1/g'|uniq|wc -l注意第⼀个管道grep将符合规则(含有"Append")的⾏抽出来, 第⼆个管道sed是shell中家喻户晓的替换命令, 使⽤⽅式为 sed 's/正则表达式/替换的内容/g', 我们在正则表达式⾥使⽤了分组(就是那个括号), 替换内容⾥⽤到了1代表第⼀个分组, 如果是第⼆个则2,以此类推. 我们先是找到匹配的⾏,⽤匹配的第⼀个分组替换了整⾏, 这个分组正是我们需要的⽹址, 因此达到了提取⽹址的作⽤. 下⼀个管道unique是将重复的⽹址排除, 最后⼀个管道wc -l是数量统计.(5)最⼤数/最⼩数/平均数统计基于上⼀个例⼦, 如果我们提取的是⼀个数字, 要进⾏最⼤数/最⼩数/平均数的统计, 需要⽤到awk管道了, 将wc -l 换成:awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1(6)分组统计基于第(4)个例⼦, 如果要统计每个⽹址出现的次数, 实现类似于mysql group by的效果. 将wc -l 换成:awk '{a[$1]++}END{for (j in a) print j","a[j]}'输出格式: 分组,出现的次数(7)分组统计排序上⼀个例⼦输出的格式是: 分组,出现的次数. 如果需要在输出的时候按照出现的次数排序, 那么需要在后⾯加⼀个管道sort|sort -t ',' -k 2 -n其中的参数-t ','表⽰⽤逗号分割数据, 结合上⾯的案例, 将会分成两列, 第⼀列是⽹址, 第⼆列是出现的次数, -k 2 表⽰第⼆列参与排序, -n表⽰把它当成数字来排序, 不加这个参数会出现'10'⽐'2'⼩的情况. 如果你要将倒叙拍列输出结果, 可以加参数-r只要掌握以上的基本⽤法, 可以满⾜⼤部分的⽇常统计需求了, 其中awk的写法基本是固定的, 需要改动的只是正则表达式的部分. ⾥⾯的每个命令更详细的⽤法请查阅资料.

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688986403a191835.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信