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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初等数学几百年重大错误:N各元n的对应n+1的全体是N的真子集N+——百年病态集论的症结

黄小宁 数学图可是“离散”的点组成的点集N{0,1,2,…,n,…0}(各数是点的坐标)。设本文所说集合往往是元不少于两个的集。定义:若数(点&#xff09…

实现一个能设置MaxLine的LayoutManager

实现一个能设置MaxLine的LayoutManager 有时候,我们会遇到这种需求:一个线性的列表布局,当item量很少的时候,就是wrap_content直接展示完所有item,但是当item数量超过某个数时就要固定高度,让其变成可滑动…

jmeter如何把一个请求的响应中部分字段提取出来便于下个请求用

jmeter如何把一个请求的响应中部分字段提取出来便于下个请求用,可以通过json提取器提取,如果提取多个,就设置多个json提取。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dd5afb1fca3f4e31b636e17e11e8dfc3.png

15年让爱轮回

15年前,运巧的命运齿轮因一位记者的稿件悄然转动,运巧这个名字,真的是命运的巧合,把她和邦尔骨科连接在了一起,她的人生轨迹因一家医院的善举发生了改变。那时的她,面临生活的重重困境,求学之路…

python实战实例:矩阵加法乘法转置

1.矩阵加法—题目描述 输入两个 n行 m 列的矩阵 A 和 B,输出它们的和 AB,矩阵加法的规则是两个矩阵中对应位置的值进行加和,具体参照样例。 输入格式 第一行包含两个整数 n 和 m,表示矩阵的行数和列数。 接下来 n 行&#xff…

Git安装及配置

Git安装 在你开始使用 Git 前,需要将它安装在你的计算机上。 即便已经安装,最好将它升级到最新的版本。 你可以通过软件包或者其它安装程序来安装,或者下载源码编译安装。 下面,我们将会介绍不同操作系统上 Git 的安装方法。 在 Windows 上安装 在 Windows 上安装 Git 的…

STM32的寄存器详解

目录 前言 一、 STM32 单片机寄存器概述 1.寄存器的作用 2.寄存器的分类 二、STM32 内核寄存器 1.程序计数器(PC) 2.堆栈指针(SP) 3.链接寄存器(LR) 4.控制寄存器(CONTROL)…

智能分拣投递机器人

产品介绍 自研智能分拣投递机器人,专注于物流行业“NC小件”的分拣与投递,机器人运行稳定、分拣效率高,搭配智能分拣投递系统单台机器人最大作业效率可达400件/H,投递效率相较于传统“小黄人“提升了30%-50%,可替代“…

【3.8】贪心算法-解无重叠区间

一、题目 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后,剩下的区间没有重叠…

EtherCAT 转 ModbusTCP 网关

设备简介 本产品是 EtherCAT 和 Modbus TCP 网关,使用数据映射方式工作。 本产品在 EtherCAT 侧作为 EtherCAT 从站,接 TwinCAT 、 CodeSYS 、 PLC等;在 ModbusTCP 侧做为 ModbusTCP 主站( Client )或从站…

奉加微PHY6233开门狗;超时时间对不上;好像应用不需要喂狗只需要开启定时器就行;底层是通过空闲任务喂狗的

超时时间对不上 这里设置看门狗超时时间为WDG_16S: hal_watchdog_config(WDG_16S);但是我测试到复位时间却是34秒: 然后我设置时间为WDG_2S的话实际间隔是6秒: 我很无语,被逼无奈只能够认了,最小设置是WDG_2S也就是说时间为6秒,这时候2秒喂狗一次: #define

计算机视觉基础. 1 学习导论

1 .引言 学习的目的是从过去的经验中吸取教训,以解决未来的问题。通常,这涉及搜索解决问题过去实例的算法。然后,该算法可以应用于该问题的未来实例。 过去和未来不一定指日历日期;相反,它们指的是学习者之前看到的内…

使用python导出Excel表格中的lua配置

背景:游戏开发中, 策划使用Excel配置游戏中的参数数据,写一个工具用于导出这些配置 工具选择使用 python来开发,这样Windows、macOS、Linux平台都可以使用,而且有丰富的第三方模块。 本机先安装python,我…

二叉树相关练习

二叉树相关oj题: 对称二叉树 解题思路:判断一棵树是否轴对称,先判断左右子树结构是否相同,结构相同的情况下再判断对应的val是否轴对称,判断根节点的左右子树,再判断根节点的左右子树的左右子树是否轴对称…

CAD二次开发IFoxCAD框架系列(25)- 自动加载和初始化的使用

自动加载,意思就是我们不需要每次重启都得要去输入netload加载软件,这个我们该怎么解决,CAD给我们提供了注册表的方式来进行加载,IFoxCAD给我们提供了非常便捷的操作注册表的方法。 namespace ifoxgse.Core.System;public static…

【Python系列】text二进制方式写入文件

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

C语言 | Leetcode C语言题解之第376题摆动序列

题目&#xff1a; 题解&#xff1a; int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int prevdiff nums[1] - nums[0];int ret prevdiff ! 0 ? 2 : 1;for (int i 2; i < numsSize; i) {int diff nums[i] - nums[i - 1];if ((…

Redux的中间件原理分析

Redux的中间件原理分析 redux的中间件对于使用过redux的各位都不会感到陌生&#xff0c;通过应用上我们需要的所有要应用在redux流程上的中间件&#xff0c;我们可以加强dispatch的功能。最近抽了点时间把之前整理分析过的中间件有关的东西放在这里分享分享。本文只对中间件涉…

Leetcode 404-左叶子之和

题目 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 题解 二叉树的题目&#xff0c;如果需要返回某个值&#xff0c;可以分左右子树递归计算&#xff0c;最后sumleftright 递归三部曲&#xff1a; 确定递归函数的参数和返回值 判断一个树的左叶子节点之和&…

插入排序

插入排序是一种简单直观的排序算法。它的基本思想是将待排序的数据分成已排序和未排序两部分&#xff0c;每次从未排序部分选择一个元素插入到已排序部分的合适位置&#xff0c;直到未排序部分为空。 插入排序是一种简单直观的排序算法&#xff0c;它的基本思想是将一个元素插…