linux nginx排序去重,Linux下对文件进行去重计数以及排序

实践一

最近需要对nginx日志文件进行统计,几十个文件,加起来上千万行的记录,用代码写就有点太那啥了,还占内存,所以决定使用linux命令来实现。

大概需求就是统计访问量top100的请求量,以及这100个请求的平均响应时长。

写出来对命令长这样:

cat nginx.log_2017-10-*.bak | awk -F '|' '{print $5}' | grep '?_' | awk -F '?' '{print $1}'| sort| uniq -c | sort -k 1 -nr | head -20

下面一一分析下上面对命令

awk -F '|' '{print ..}': 这个命令可以对一行数据进行格式化拆分,它本身支持非常灵活的内容处理,本身特性还可以进行编程,非常强大,这里只是把一行记录按‘|‘分开后输出第5部分的内容。

sort : 默认按默认排序是按照ASCII进行排序

uniq -c : 表示合并相邻的重复记录,并统计重复数。因为uniq -c 只会合并相邻的记录,所以在使用该命令之前需要先排序

sort -k 1 -nr : 经过uniq -c 处理之后的数据格式形如"2 data",第一个字段是数字,表示重复的记录数;第二个字段为记录的内容。我们将对此内容进行排序。sort -k 1表示对于每行的第一个字段进行排序,这里即指代表重复记录数的那个字段。因为sort命令的默认排序是按照ASCII,这就会导致按从大到小进行排序时,数值2会排在数值11的前面,所以需要使用-n 参数指定sort命令按照数值大小进行排序。-r 表示逆序,即按照从大到小的顺序进行排序

head -20 : 排完序,取前20行

实践二

某次调优JVM时,分析GC日志,其中使用CMS+UseParNewGC 回收器,产生的日志中要分析平均YGC的时长。

一行YGC日志长这样:

572.219: [GC (Allocation Failure) 572.219: [ParNew: 420082K->700K(471872K), 0.0081741 secs] 498361K->78979K(2044736K), 0.0082966 secs] [Times: user=0.02 sys=0.01, real=0.01 secs]

计算平均时长,我这里用了两条命令,一条求总数,一条求总时长

>> cat gc.log | grep 'Allocation' | awk -F ',' '{print $2}' | wc -l # 总数

200

>> cat gc.log | grep 'Allocation' | awk -F ',' '{print $2}' | awk -F 'secs' '{a+=$1}END{print a}' # 总时长

1.53131

在手动计算了一下平均值。其实也可以一行命令来计算平均值:

>> cat gc.log | grep 'Allocation' | awk -F ',' '{print $2}' | awk -F 'secs' '{a+=$1}END{print a/NR}'

linux命令还是十分强大的,有时候一次性的文件处理,可以优先考虑一下命令处理。

参考文章:

linux sort,uniq,cut,wc命令详解

awk if语句

Linux下计算命令: 求和、求平均值、求最值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值