Linux awk案例

news2024/9/23 17:52:28

目录

  • 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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAST :静态应用程序安全测试

目录 什么是 SAST? 为什么我们需要 SAST? SAST 解决了哪些问题? SAST 如何工作? 揭秘 SAST、DAST、IAST 和 RASP SAST 和 DAST 有什么区别? 典型的 SAST 优势 下一代 SAST 的增强优势 SAST的优缺点 传统 SA…

LabVIEW呼吸机测试系统开发

基于LabVIEW的呼吸机测试系统借鉴了ASL5000的设计理念,能够精确监控和调整呼吸机的关键性能参数,如氧气浓度、压力和流量等,以确保其在临床应用中的安全性和有效性。通过图形化编程,系统实现了参数的实时自动化测试,显…

Datawhale AI 夏令营 第五期 CV Task3

活动简介 活动链接:Datawhale AI 夏令营(第五期) 以及CV里面的本次任务说明:Task 3 上分思路——数据集增强与模型预测 链接里的教程非常详细,主要是从三个方面(数据集增强、设置 YOLO 模型训练参数、设…

【函数模板】函数模板的重载

一、函数模板参数的重载 当函数模板的参数不同时&#xff0c;而函数名称相同时&#xff0c;会发生重载。根据调用时传入的参数不同来选择用于实例化的模板 template<typename T> void Func(T a) {std::cout << "普通单参Func函数模板调用了\n"; } temp…

地震微分方程代码 - 第一部分

Seismic stencil codes - part 1 — ROCm Blogs (amd.com) 2024年8月12日&#xff0c;作者&#xff1a;[Justin Chang](Justin Chang — ROCm Blogs) 和 [Ossian O’Reilly](Ossian O’Reilly — ROCm Blogs)。 在高性能计算&#xff08;HPC&#xff09;领域&#xff0c;地震工…

LTspice 的简单使用【软件使用学习】

前言 在学习嵌入式的时候我们避免不了和一些电路打交道&#xff0c;但是每次去焊接电路验证功能又比较麻烦&#xff0c;这个时候我们可以选择使用仿真的方式来验证我们的想法&#xff0c;这样更加地便捷高效&#xff0c;这篇文章仅作为个人学习LTspice的记录。 基本操作 LTs…

C语言 | Leetcode C语言题解之第383题赎金信

题目&#xff1a; 题解&#xff1a; bool canConstruct(char * ransomNote, char * magazine){int r strlen(ransomNote);//首先是我们的目标数组和我们的提供方数组长度int m strlen(magazine);if (r > m)return false;//如果提供的数量都不够补充目标&#xff0c;那肯定…

SpringBoot应用打成ZIP部署包

背景 平常开发SpringBoot应用&#xff0c;打包的时候一般都是按默认的打包方式把所有资源、源码和依赖统一打到一个jar包&#xff0c;这种打包方式方便快捷。最近开发项目遇到一个需求&#xff0c;需要把项目中的配置文件和/bin目录中的启停脚本打到SpringBoot应用jar之外&…

Gland安装与Debug

下载地址&#xff1a;https://www.jetbrains.com.cn/go/download/#sectionwindows debug官方文档: https://www.jetbrains.com/help/go/debugging-code.html 创建项目 选择新建项目 填写项目本地路径&#xff0c;以及选择go SDK 项目创建后检查项目设置 添加main包以及…

新进程的加载与创建

1、实现fork系统调用 fork创建子进程。通过fork的返回值来判断是父进程还是子进程。 当fork()返回值会返回进程的id&#xff0c;当进程发现pid0&#xff0c;就知道了自己是fork出来的子进程&#xff1b;而如果pid > 0&#xff0c;则知道了自己是父进程。 fork系统调用实现…

【LoRa】CAD的工作原理以及使用

目录 1 CAD介绍1.1 CAD工作原理1.2 与CAD有关的中断 2 CAD的使用2.1 CAD总耗时2.2 CAD均衡配置2.3 最优配置速查表 3 CAD的应用3.1 CAD项目使用3.2 CAD扩展应用CSMA 4 参考文献 1 CAD介绍 本章介绍一下LoRa芯片的CAD功能、原理以及如何使用。由于第一代SX127x的CAD使用与以后的…

实测数据处理(RD算法处理)——SAR成像算法系列(十)

系列文章目录 《SAR学习笔记-SAR成像算法系列&#xff08;一&#xff09;》 《距离多普勒算法&#xff08;RDA&#xff09;-SAR成像算法系列&#xff08;三&#xff09;》 文章目录 一、算法流程 1.1、回波信号生成 1.2、 距离脉冲压缩 1.3、距离徙动校正 1.4、方位脉冲压缩 …

HDMI显示器驱动设计与验证

1 HDMI简介 在此附上HDMI协议的数据手册链接&#xff0c;更有1.4的中文版&#xff1a; https://pan.baidu.com/s/1CdEQuJzYXnESNZK60k7aVQ?pwd6666https://pan.baidu.com/s/1CdEQuJzYXnESNZK60k7aVQ?pwd6666链接&#xff1a;https://pan.baidu.com/s/1CdEQuJzYXnESNZK60k7a…

Kioxia的NVMe RAID卸载有何亮点?

随着每一代固态硬盘SSD的速度不断提升&#xff0c;RAID阵列面临着一个重大的挑战&#xff1a;如何有效地维持并扩展性能。即使是通过专门的RAID卡来处理RAID操作的情况下&#xff0c;例如在RAID 5阵列中&#xff0c;简单的写请求也需要涉及两次读取和两次写入不同的SSD。如果没…

ENVI SARscape||笔记

介绍就不介绍了&#xff0c;直入主题&#xff01; 第一章 ENVI和SARscape 下载与安装&#xff1a; ENVI 5.6 软件安装包下载及安装激活教程&#xff01; (qq.com)https://mp.weixin.qq.com/s/kH0g5g9AALgDNPssfdZ8wQ 启动 ENVI 的启动模式有两种&#xff1a;ENVI和ENVIIDL&…

鸿蒙 tabs 底部中间凸出

1, 先看效果 2, 直接cv代码-- 先修改一下 资源配置 图标使用自己的 color.json配置 {"integer": [{"name": "tab_row_column_image_width","value": 24},{"name": "tab_row_column_image_height","value&qu…

Vue面试常见知识总结2——spa、vue按需加载、mvc与mvvm、vue的生命周期、Vue2与Vue3区别

SPA SPA&#xff08;Single Page Application&#xff0c;单页面应用&#xff09;是一种Web应用程序架构&#xff0c;其核心特点是在用户与应用程序交互时&#xff0c;不重新加载整个页面&#xff0c;而是通过异步加载页面的局部内容或使用JavaScript动态更新页面。以下是对SPA…

【QT】增加注释模板

为了增加项目可读性&#xff0c;增加注释模板 选择工具->外部->配置… &#xff0c;再次选择“文本编辑器”->“片段”->“添加”&#xff0c;触发命名为header_customer,点击应用&#xff0c;按照下面的模板编排,再次点击应用&#xff0c; /*******************…

【第0004页 · 递归】生成括号对

【前言】本文以及之后的一些题解都会陆续整理到目录中&#xff0c;若想了解全部题解整理&#xff0c;请看这里&#xff1a; 第0004页 生成括号对 今天这题有点难绷&#xff0c;从某种程度上来说应该是第二次写这个问题了&#xff0c;但还是卡住了&#xff0c;现在我们来看一下…

2018CCPC网络赛 C - Dream

题意 给定一个P,现在可以以任意方式重载‘’和‘*’两个符号,使得满足下列等式 其中定义如下 需要注意的是,重载过后的*需要满足以下要求: 也就是说,重载‘*’之后通过计算得到的(k1,2,3,...,p-1)的取值对于集合{1,2,3,...,p-1}是一个一一映射的关系 ​​​​最后输出2*p行,按…