当前位置: 首页 > news >正文

Linux awk案例

目录

  • 1. 查询时间超过2000毫秒的请求
  • 2. 查询指定列组合出现的次数
  • 3. 统计所有文件的大小
  • 4. 获取大于指定大小的文件名,并按照从大到小排序
  • 5. grep指定字段后,使用awk列转行
  • 6. 查询第四个字段等于指定值的内容


1. 查询时间超过2000毫秒的请求

✅log: 20231119-1.log

2023:11:19 09:07:10 SPLEND=2000 请求开始 110 END
2023:11:19 09:07:11 SPLEND=1000 请求开始 120 END
2023:11:19 09:07:12 SPLEND=3000 请求开始 119 END
2023:11:19 09:07:13 SPLEND=4000 请求开始 156 END
2023:11:19 09:07:14 SPLEND=4000 请求开始 157 END

⏹查询时间超过2000毫秒的请求

grep -a SPLEND ./20231119-1.log | awk 'BEGIN {FS="="} {if($NF>2000) print $0}'

👇结果

2023:11:19 09:07:10 SPLEND=2000 请求开始 110 END
2023:11:19 09:07:12 SPLEND=3000 请求开始 119 END
2023:11:19 09:07:13 SPLEND=4000 请求开始 156 END
2023:11:19 09:07:14 SPLEND=4000 请求开始 157 END

2. 查询指定列组合出现的次数

✅log: 20231119-2.log

你好 世界 110120 AAA
世界 你好 112123 BBB
你好 世界 343434 CCC
世界 你好 343434 DDD
世界 你好 565656 WWW
hello world 23232 EEE
hello world 23423 FFF
world hello 23232 GGG
world hello 34344 HHH

⏹查询第2列和第1列组合之后,出现的次数

cat ./20231119-2.log | awk '{cnt[$2" "$1]+=1;} END {for (i in cnt) print i,cnt[i]"回"}'

👇结果

world hello 2回
hello world 2回
你好 世界 3回
世界 你好 2回

3. 统计所有文件的大小

⏹有如下文件

fengyehong@ubuntu:~/uwsgi-2.0.18/core$ ls -l ./m*.c
-rw-rw-r-- 1 fengyehong fengyehong 32766 Feb  9  2019 ./master.c
-rw-rw-r-- 1 fengyehong fengyehong 11714 Feb  9  2019 ./master_checks.c
-rw-rw-r-- 1 fengyehong fengyehong  7616 Feb  9  2019 ./master_events.c
-rw-rw-r-- 1 fengyehong fengyehong 49900 Feb  9  2019 ./master_utils.c
-rw-rw-r-- 1 fengyehong fengyehong 31952 Feb  9  2019 ./metrics.c
-rw-rw-r-- 1 fengyehong fengyehong  6147 Feb  9  2019 ./mount.c
-rw-rw-r-- 1 fengyehong fengyehong 11774 Feb  9  2019 ./mule.c
  • total:定义了一个变量
  • $5:第5个字段,即文件大小的字段。
  • 通过{total += $5}累加完成之后,在END{ }代码块中将结果打印出来
ls -l ./m*.c | awk '{total += $5} END {print "总大小: ", total/1024, "KB"}'

在这里插入图片描述


4. 获取大于指定大小的文件名,并按照从大到小排序

  • if($5 > 100000):指定获取大于100000byte的文件
  • -k5,5:使用第5列作为排序的关键字段
  • n:使用数字顺序排序
  • r:逆向排序,从大到小排序
# 从小到大排序
ls -l ~/uwsgi-2.0.18/core | awk '{if($5 > 100000) print $0}' | sort -k5,5n
# 从大到小排序
ls -l ~/uwsgi-2.0.18/core | awk '{if($5 > 100000) print $0}' | sort -k5,5nr

在这里插入图片描述


5. grep指定字段后,使用awk列转行

info.txt

110120 SPLREQUEST name=東川雄一 AAA memberID=1 tel=080-1111-1111 SPLEND ExecTime=200 ResultCode=200
123456 SPLREQUEST name=西村祐二 BBB memberID=2 tel=080-2222-2222 SPLEND ExecTime=300 ResultCode=200
123444 SPLREQUEST name=南山裕三 CCC memberID=3 tel=080-3333-3333 SPLEND ExecTime=200 ResultCode=200
123434 SPLREQUEST name=北岡優四 memberID= tel=080-4444-4444 SPLEND ExecTime=400 ResultCode=200
345345 SPLREQUEST name=田中様 EEE memberID=5 tel=080-5555-5555 SPLEND ExecTime=500 ResultCode=200
674545 SPLREQUEST name=竹下様 FFF memberID=6 tel=080-6666-6666 SPLEND ExecTime=400 ResultCode=200

🤪需求:从文件中获取第一个字段,name字段,tel字段,ExecTime字段,并转为一行

  • 获取每个字段可以使用 -e配置项,然后配合正则表达式\S*获取非空内容
  • -o:仅获取匹配到的内容,不获取行的其他内容
  • 仅使用grep命令得到的结果都不在一行上,而应该是每4行一组
  • 使用awk命令的ORS指定文本输出时的换行符
  • ORS = (NR % 4 == 0) ? "\n" : ","
    • 如果当前行号不是4的倍数,还不该换行,将换行符指定为,,不会引起换行,从而实现列转行。
    • 如果当前行号是4的倍数,说明每4行已经变为一行,此时将换行符置为\n,实现没一行有4个字段。
grep -a -o -e "^\S*" -e "name=\S*" -e "tel=\S*" -e "ExecTime=\S*" ./info.txt | awk 'ORS = (NR % 4 == 0) ? "\n" : ","'

在这里插入图片描述


6. 查询第四个字段等于指定值的内容

info.txt

110120	SPLREQUEST	name=東川雄一	994	memberID=1	tel=080-1111-1111	SPLEND	ExecTime=200	ResultCode=200
123456	SPLREQUEST	name=西村祐二	889	memberID=2	tel=080-2222-2222	SPLEND	ExecTime=300	ResultCode=200
123444	SPLREQUEST	name=南山裕三	994	memberID=3	tel=080-3333-3333	SPLEND	ExecTime=200	ResultCode=200
123434	SPLREQUEST	name=北岡優四	110	memberID=	tel=080-4444-4444	SPLEND	ExecTime=400	ResultCode=200
345345	SPLREQUEST	name=田中様	110	EEE	memberID=5	tel=080-5555-5555	SPLEND	ExecTime=500	ResultCode=200
674545	SPLREQUEST	name=竹下様	114	FFF	memberID=6	tel=080-6666-6666	SPLEND	ExecTime=400	ResultCode=200
  • 需求:查询第四个字段的值为994所在行的内容
  • 每个字段使用Tab分隔,所以使用-F'\t'
awk -F'\t' '$4 == "994" {print $0}' ./info.txt | nkf -w8

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt模态对话框与非模态对话框
  • 手搓智能体第三弹之复刻 ⌈ AI智能搜索 ⌋
  • 【C++ 第十九章】异常
  • 哈希 详解
  • 10分钟了解OPPO中间件容器化实践
  • 专栏前言-WooYun漏洞库环境搭建
  • SaaS行业渠道管理的深度探索:两种增长模式哪个更强?
  • 非标机械设计项目“规范”笔记
  • 使用 Nginx 部署 Vue.js 前端项目指南
  • 王立铭脑科学50讲后续6,自己从课程中提起自己所需的知识,安放到自己的知识体系中。
  • Elasticsearch 向量数据库本地部署 及操作方法
  • OpenStack概论和部署
  • npm 换源
  • 如何录制黑神话悟空的游戏BGM导入iPhone手机制作铃声?
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习进阶task2:自适应学习率,分类
  • Android Volley源码解析
  • HTTP那些事
  • Java教程_软件开发基础
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Node + FFmpeg 实现Canvas动画导出视频
  • NSTimer学习笔记
  • React-Native - 收藏集 - 掘金
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • zookeeper系列(七)实战分布式命名服务
  • 初识 beanstalkd
  • 多线程事务回滚
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 盘点那些不知名却常用的 Git 操作
  • 设计模式(12)迭代器模式(讲解+应用)
  • 微信开放平台全网发布【失败】的几点排查方法
  • 我从编程教室毕业
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #VERDI# 关于如何查看FSM状态机的方法
  • #window11设置系统变量#
  • $L^p$ 调和函数恒为零
  • (03)光刻——半导体电路的绘制
  • (12)Hive调优——count distinct去重优化
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (实战篇)如何缓存数据
  • (转)linux下的时间函数使用
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .net core Redis 使用有序集合实现延迟队列