千家信息网

大数据中AWK命令的示例分析

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章将为大家详细讲解有关大数据中AWK命令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。对于下面的nginx日志access.log,用脚本分析出访问
千家信息网最后更新 2024年11月22日大数据中AWK命令的示例分析

这篇文章将为大家详细讲解有关大数据中AWK命令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。


对于下面的nginx日志access.log,用脚本分析出访问ip的Top 10。
其实这个题不难,但是考察了几个常用的shell 命令,awk、uniq、sort、head,我觉得对于做大数据开发、运维、数仓等来说都是应该必备的。


2018-11-20T23:37:40+08:00 119.15.90.30 - "GET /free.php?proxy=out_hp&sort=&page=1 HTTP/1.1" "/free.php" - 200 0.156 362 6849/7213 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - - - "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)"
2018-11-20T23:37:44+08:00 117.30.95.62 - "GET /partner.php HTTP/1.1" "/partner.php" - 200 0.016 457 6534/6956 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - https://blog.csdn.net/ithomer/article/details/6566739 - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
2018-11-20T23:37:44+08:00 117.30.95.62 - "GET /css/bootstrap.min.css HTTP/1.1" "/css/bootstrap.min.css" - 200 0.045 398 19402/19757 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - https://proxy.mimvp.com/partner.php - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
2018-11-20T23:37:44+08:00 117.30.95.62 - "GET /css/hint.min.css HTTP/1.1" "/css/hint.min.css" - 200 0.000 393 1635/1989 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - https://proxy.mimvp.com/partner.php - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"

来上答案

 cat access.log | awk '{print $2}'| uniq -c | sort -k1 -nr| head -10

其实这个问题还有很多变种,比如除了脚本,用你最熟悉的语言写出来,还有如果文件过大,超过了内存限制,怎么处理。不过这些都是题外话了,我们今天主要讲一下awk在工作中的一些简单的应用。

其实awk的功能非常强大,不过今天我们主要来讲讲在我们的工作中比较常用的awk用法。


awk '{[pattern] action}' {filenames}

切割文件

-F 指定拆分文件的分隔符,默认是空格或者 \t 比如上面的日志我们想获取第二列的ip地址,我们可以这样写

awk -F ' ' '{print $2}'  access.log 

空格我们是可以不用写的,我这里写出来做一个示范。

其实还有一种特殊字符,比如hive中默认分隔符是0x01,这种的使用awk怎么写呢?

awk -F '\\001' '{ print $1 }' abcd.txt

内置变量的使用

  • $0 用于打印出整行的字段.
  • $n 由 -F 参数指定的分隔符切割之后,$n用于打印出来第几个字段,索引从1开始
  • NF 每行数据切分之后,有多少列,比如我们可以用print $NF 来打印出最后一列

有一些时候我们可以用awk 截取其中的某几个字段拼接出来我们想要的一些语句。
比如我们想截取上面access.log里面的ip字段,然后生成一些sql,插入到数据库。


awk '{print "insert into mytable(ip) values('\''"$2"'\'');"}' access.log > /tmp/ip.sql

有人会问,这种场景一般什么时候会用呢,比如你有一万条或者更多的数据,你完全可以写一个sql来插入,但是如果是数量太多的话,一次性写入太多数据,会导致锁表,这个时候其他人就没法插入了,如果是线上的生产环境就更不允许了,所以对于一些类似的操作,我们可以拆分出多个sql来一个个的执行,这样单个sql锁表的时间就会减少,避免长时间锁表带来的数据库不可用。

正则匹配

有时候我们只想打印出来一些我们想要的列,我们可以通过正则匹配来做。

比如我们想打印出来上面的access.log中117开头的ip,可以这样做.

awk '$2 ~ /^117/ {print $2}' access.log 

类sql功能

其实awk还可以帮我们实现一些简单的类似sql的功能,我们也简单说一下。

比如我们有一个下面的学生表

id 班级 姓名
id class name

1 1班 张三
2 2班 李四
3 1班 王五
4 3班 赵六

比如我们想统计每个班级有多少同学,可以使用如下命令

awk '{a[$2]++} END {for(i in a){print i"人数 : "a[i]}}' student.txt

关于"大数据中AWK命令的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

数据 命令 字段 面的 分隔符 功能 文件 时候 更多 篇文章 示例 分析 常用 数据库 日志 正则 班级 空格 脚本 工作 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 专升本数据库考试有多难 金山区电子软件开发技术指导 网络安全宣传周期 网络安全包括机密性 网络安全大家谈快板内容 浦东新区智能网络技术质量保证 威海微信小程序软件开发公司 网络安全模式手动加载 莱山区电商软件开发推荐 软件开发需求确认需要多少工作日 刺激战场日本玩家在哪个服务器 国家哲学社会科学数据库注册 蛋糕盒设计软件开发 明日之后服务器上的戒指怎么获得 服务器太久没有响应 数据库设计怎么插入第一页 表格里如何建立数据库 中国网络安全公司和美国差距 机房服务器搭建流程 网易版mc怎么找服务器 广州曜月网络技术有限公司官网 linux服务器常用命令 近期网络安全攻击事件 周口市网络安全责任制实施办法 网络安全基本技术和管理手段 python不适合软件开发 vfp数据库热备份 nodejs数据库推荐 斯柯达软件开发公司 申请电子驾照服务器异常
0