美文网首页
awk统计nginx pv uv

awk统计nginx pv uv

作者: swoft_ | 来源:发表于2019-08-01 20:38 被阅读0次

awk

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。
它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具。

awk其实不仅仅是工具软件,还是一种编程语言。不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了。

基本使用

格式
awk 动作 文件名
示例

awk '{print0}' demo.txt

前面单引号内部有一个大括号,里面就是每一行的处理动作print 0。其中,print是打印命令,0代表当前行,因此上面命令的执行结果,就是把每一行原样打印出来。

awk会根据空格和制表符,将每一行分成若干字段,依次用1、2、$3代表第一个字段、第二个字段、第三个字段等等。

$ echo 'this is a test' | awk '{print $3}'
a

修改默认的分隔符

# 按照空格符号进行分割
$ awk -F ':' '{ print $1 }' demo.txt

变量

$NF

变量NF表示当前行有多少个字段,因此NF就代表最后一个字段。(NF-1)代表倒数第二个字段。

$ awk -F ':' '{print $1, $(NF-1)}' demo.txt
root /root
daemon /usr/sbin
bin /bin
sys /dev
sync /bin
上面代码中,print命令里面的逗号,表示输出的时候,两个部分之间使用空格分隔。

NR

变量NR表示当前处理的是第几行。

$ awk -F ':' '{print NR ") " $1}' demo.txt
1) root
2) daemon
3) bin
4) sys
5) sync
上面代码中,print命令里面,如果原样输出字符,要放在双引号里面。

http://www.ruanyifeng.com/blog/2018/11/awk.html

https://gregable.com/2010/09/why-you-should-know-just-little-awk.html

统计nginx pv uv

查看nginx的配置确定每一列对应的含义

log_format  main '$remote_addr - $remote_user [$time_local] "$request" "$request_body"'
                      '$status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent" "$http_x_forwarded_for" '
                      '"$server_name" $request_time $upstream_response_time';

pv

awk '{print $1}' acces.log | sort | uniq -c | wc -l 

# 分析
只输出第一列的结果
  awk '{print $1}' acces.log  
排序
  sort 
去重  并统计出现次数
  uniq -c
去重之后即是uv
wc -l 

root@app:/etc/nginx# wc /var/log/nginx/access.log
   127627   3471552 102800749 /var/log/nginx/access.log
   #文件的行数为、单词数、字节数 

统计pv
直接求行数

awk '{print $1}' access.log|wc -l

求访问最频繁的ip地址

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

sort -n  : 按照数字排序,否则会按照字符串比较,就会出现2比11大
sort -k 1 : 指定列数,1是第一列。
sort -r  : 按照相反的书序排序

求出前10的接口调用

awk '{print $1}' nginx_access.log | sort | uniq -c | sort -n -k 1 -r | head 10 
-n -k 1 -r  :按照数字排序第一列并求倒序
image.png

awk '{if(5==403) print1}' nginx_access.log | sort | uniq -c | sort -n -k 1 -r | head 10

总结:

-F 指定分割字符 if 可以用来做为判断

awk -F ':'  '{if($5==403) print $1}' nginx_access.log | sort | uniq -c | sort -n -k 1 -r | head 10 

相关文章

  • awk统计nginx pv uv

    awk awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得...

  • nginx (转载)

    nginx访问量统计 1.根据访问IP统计UV awk '{print $1}' access.log|sort ...

  • python统计pv/uv

    代码实现 参考资料 从Nginx的access日志统计PV、UV和热点资源

  • SparkStreaming项目实战,实时计算pv和uv(硬肝)

    最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实...

  • nginx日志统计分析的相关常用命令

    查询指定关键词行数 统计PV,UV数 统计所有的PV数 统计当天的PV数 统计指定某一天的PV数 根据访问IP统计...

  • 统计PV、UV

    使用Hive日常工作基本上都会碰到统计PV、UV的需求,有如下日志表格式表: 统计一段时间内的PV、UV可以用如下...

  • Linux常用命令

    awk 文本分析 举个例子 按corpid统计访问pv:cat access.log | awk -F ',' '...

  • 打点统计

    打点 百度统计后台 PV/UV PV(Page View):页面的访问次数,就算是刷新一次都会计算在内 UV(Un...

  • 前端 SPA 单页应用数据统计解决方案 (ReactJS / V

    前端 SPA 单页应用数据统计解决方案 (ReactJS / VueJS) 一、百度统计的代码: UV PV 统计...

  • Nginx日志

    1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |...

网友评论

      本文标题:awk统计nginx pv uv

      本文链接:https://www.haomeiwen.com/subject/keacdctx.html