安全杂记 - Linux文本三剑客之awk
目录
- 1.什么是AWK
- 2.正则表达式
- 3.语法
- 4.内置变量
- 示例
- printf命令
- 5.复现awk经典实例
- (1).插入几个新字段
- (2).格式化空白
- (3).筛选IPv4地址
- (4).筛选给定时间范围内的日志
1.什么是AWK
awk、grep、sed是linux操作文本的三大利器,合称文本三剑客。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。三剑客最好要搭配神兵利器正则表达式一起使用。
2.正则表达式

3.语法
- 1.awk
[options]'program'` `var=valuefile… - 2.awk
[options] -f programfile var=valuefile…`` - 3.awk
[options] ``‘BEGIN{ action;… } pattern{ action;… } END{
action;… }’file…
语法说明 - 1.pattern部分决定动作语句何时触发及触发事件:BEGIN、END
2.action 对数据进行处理,放在{}内指明:print、printf
3.最常用的是 print,默认以空白字符分隔
4.options 参数:输入分隔符,默认以空白字符分隔,通过 -F 选项来执行分隔符
4.内置变量
- FS :输入字段分隔符,默认为空白字符
- OFS :输出字段分隔符,默认为空白字符
- RS :输入记录分隔符,指定输入时的换行符,原换行符仍有效
- ORS:输出记录分隔符,输出时用指定符号代替换行符
- NF :字段数量,共有多少字段, N F 引用最后一列, NF引用最后一列, NF引用最后一列,(NF-1)引用倒数第2列
- NR :行号,后可跟多个文件,第二个文件行号继续从第一个文件最后行号开始
- FNR :各文件分别计数, 行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
- FILENAME :当前文件名
- ARGC:命令行参数的个数
- ARGV :数组,保存的是命令行所给定的各参数,查看参数
示例
[root@localhost ~]# cat awkdemo //示例文件
hello:world
linux:redhat:lalala:hahaha
along:love:youou
[root@localhost ~]# awk -v FS=':' '{print $1,$2}' awkdemo
hello world
linux redhat
along love
[root@localhost ~]# awk -v FS=':' -v OFS='---' '{print $1,$2}' awkdemo
hello---world
linux---redhat
along---love
[root@localhost ~]# awk -v FS=':' -v ORS='---' '{print $1,$2}' awkdemo
hello world---linux redhat---along love---[root@localhost ~]# awk -F: '{print NF}' awkdemo
2
4
3
[root@localhost ~]# awk -F: '{print $(NF-1)}' awkdemo
hello
lalala
love
[root@localhost ~]# awk '{print NR}' awkdemo awkdemo
1
2
3
4
5
6
[root@localhost ~]# awk END'{print NR}' awkdemo awkdemo
6
[root@localhost ~]# awk '{print FNR}' awkdemo awkdemo
1
2
3
1
2
3
[root@localhost ~]# awk '{print FILENAME}' awkdemo
awkdemo
awkdemo
awkdemo
[root@localhost ~]# awk 'BEGIN {print ARGC}' awkdemo awkdemo
3
printf命令
(1)格式化输出
printf` `"FORMAT"``, item1,item2, ...
-
必须指定FORMAT
-
不会自动换行,需要显式给出换行控制符\n
-
FORMAT 中需要分别为后面每个item 指定格式符
(2)格式符:与item 一一对应
-
%c: 显示字符的ASCII码
-
%d, %i: 显示十进制整数
-
%e, %E: 显示科学计数法数值
-
%f :显示为浮点数,小数 %5.1f,带整数、小数点、整数共5位,小数1位,不够用空格补上
-
%g, %G :以科学计数法或浮点形式显示数值
-
%s :显示字符串;例:%5s最少5个字符,不够用空格补上,超过5个还继续显示
-
%u :无符号整数
-
%%: 显示% 自身
(3)修饰符:放在%c[/d/e/f…]之间
- #[.#]:第一个数字控制显示的宽度;第二个# 表示小数点后精度,%5.1f
- -:左对齐(默认右对齐) %-15s
- +:显示数值的正负符号 %+d
[root@localhost ~]# awk -F: '{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
// 第一列显示小于20的字符串;第2列显示整数并换行
[root@localhost ~]# awk -F: '{printf "%20s---%u\n",$1,$3}' /etc/passwdroot---0bin---1daemon---2
// 使用-进行左对齐;第2列显示浮点数
[root@localhost ~]# awk -F: '{printf "%-20s---%-10.3f\n",$1,$3}' /etc/passwd
root ---0.000
bin ---1.000
daemon ---2.000
adm ---3.000
5.复现awk经典实例
(1).插入几个新字段
在"a b c d"的b后面插入3个字段e f g。
[root@localhost ~]# echo "a b c d" | awk '{$2=$2" e f g";print}'
a b e f g c d
(2).格式化空白
移除每行的前缀、后缀空白,并将各部分左对齐。
[root@localhost ~]# cat shiyan.txt aaaa bbb ccc bbb aaa ccc
ddd fff eee gg hh ii j
[root@localhost ~]# awk 'BEGIN{OFS="\t"}{$1=$1;print}' shiyan.txt
aaaa bbb ccc
bbb aaa ccc
ddd fff eee gg hh ii j
(3).筛选IPv4地址
从ip a命令的结果中筛选出除了lo网卡外的所有IPv4地址。


(4).筛选给定时间范围内的日志
下面strptime2()实现的是将10/Nov/2019:23:53:44+08:00格式的字符串转换成epoch值,然后和which_time比较大小即可筛选出精确到秒的日志。
BEGIN{# 要筛选什么时间的日志,将其时间构建成epoch值which_time = mktime("2019 11 10 03 42 40")
}{# 取出日志中的日期时间字符串部分match($0,"^.*\\[(.*)\\].*",arr)# 将日期时间字符串转换为epoch值tmp_time = strptime2(arr[1])# 通过比较epoch值来比较时间大小if(tmp_time > which_time){print }
}# 构建的时间字符串格式为:"10/Nov/2019:23:53:44+08:00"
function strptime2(str ,dt_str,arr,Y,M,D,H,m,S) {dt_str = gensub("[/:+]"," ","g",str)# dt_sr = "10 Nov 2019 23 53 44 08 00"split(dt_str,arr," ")Y=arr[3]M=mon_map(arr[2])D=arr[1]H=arr[4]m=arr[5]S=arr[6]return mktime(sprintf("%s %s %s %s %s %s",Y,M,D,H,m,S))
}function mon_map(str ,mons){mons["Jan"]=1mons["Feb"]=2mons["Mar"]=3mons["Apr"]=4mons["May"]=5mons["Jun"]=6mons["Jul"]=7mons["Aug"]=8mons["Sep"]=9mons["Oct"]=10mons["Nov"]=11mons["Dec"]=12return mons[str]
}
相关文章:
安全杂记 - Linux文本三剑客之awk
目录 1.什么是AWK2.正则表达式3.语法4.内置变量示例printf命令5.复现awk经典实例(1).插入几个新字段(2).格式化空白(3).筛选IPv4地址(4).筛选给定时间范围内的日志 1.什么是AWK awk、grep、sed是linux操作文本的三大利器,合称文本三剑客。三者的功能都是处理文本&a…...
Android 开发者选项日志存储路径
android开发者选项中存在两个item是关于系统日志的。 1.日志记录器缓冲区大小 2.在设备上永久存储日志记录器数据 一个是用来设置缓冲区大小,一个是用来日志存储开关及过滤。 通过分析 system/core/logcat/logcatd.rc mkdir /data/misc/logd 0770 logd log 日志的…...
jupyter lab build失败,提示需要安装版本>=12.0.0的nodejs但其实已从官网安装18.17.0版本 的解决方法
出现的问题如题目所示,这个问题差点要把我搞死了。。。但还是在没有重装的情况下解决了😘。 问题来源 初衷是想安装lsp扩展,直接在jupyter lab网页界面的extensions中搜索lsp并点击install krassowski/jupyterlab-lsp,会提示需要…...
【set】个人练习-Leetcode-817. Linked List Components
题目链接:https://leetcode.cn/problems/linked-list-components/description/ 题目大意:给出一个vector<int> nums,其中有一些数字。再给出一个链表的头指针head,链表内的元素各不相同。如果链表中有某一段(长…...
Linux IPIP隧道连通两个局域网
拓扑结构 现有两台主机,它们具有两个网口分别接入到不同网络中。 主机A: eth0:处于 10.0.1.2/24 网段eth1: 处于192.168.1.100/24 网段 主机B: eth0:处于10.0.2.3/24 网段eth1: 处于192.168.2…...
华为QinQ技术的基本qinq和灵活qinq 2种配置案例
基本qinq配置: 运营商pe设备在收到同一个公司的ce发来的的包,统一打上同样的vlan ,如上图,同一个家公司两边统一打上vlan 2,等于在原内网vlan 10或20过来的包再统一打上vlan 2的标签,这样传输就不会和其它…...
python爬虫1:基础知识
python爬虫1:基础知识 前言 python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 目录结构 文章目录 python爬虫1:基础知识1. 基础认知1.1 什么是爬虫&…...
【FAQ】安防监控视频EasyCVR平台分发的FLV视频流在VLC中无法播放
众所周知,TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上,视频监控…...
python爬虫2:requests库-原理
python爬虫2:requests库-原理 前言 python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 目录结构 文章目录 python爬虫2:requests库-原理1. 概述2. re…...
纹理贴图和渲染
纹理贴图 纹理映射(也就是纹理图或者叫做纹理贴图)是一种在计算机图形学中常用的技术,它可以将二维的图像(纹理)映射到三维物体的表面上,以增强视觉效果。“atlas”通常是指纹理图集,也就是将多…...
BLIP2
BLIP2的任务是基于已有的固定参数的图像encoder和语言大模型(LLM)搭建一个具有图像理解能力的图文模型,输入是图像和文本,输出是文本。 BLIP2基于Q-Former结构,如下图所示。Q-Former包含图像transformer和文本transfo…...
陀螺玩具跨境电商亚马逊CPC认证
陀螺指的是绕一个支点高速转动的刚体。陀螺是中国民间最早的娱乐工具之一.形状上半部分为圆形,下方尖锐。从前多用木头制成,现代多为塑料或铁制。玩时可用绳子缠绕,用力抽绳,使直立旋转。或利用发条的弹力旋转。传统古陀螺大致是木…...
TS学习02-接口
接口 ts原则之一就是对值所具有的结构进行类型检查。 结构的左右就是为了这些类型命名和代码定义契约 interface LabelValue {label: string } function point(label: LabelValue) {} let obj {label:标题,age: 18} point(obj)类型检查器不会去检查属性的顺序&a…...
WuThreat身份安全云-TVD每日漏洞情报-2023-08-09
漏洞名称:致远OA文件上传漏洞 漏洞级别:高危 漏洞编号:NULL 相关涉及:1. A6、A8、A8N的V8.0SP2、V8.1、V8.1SP1 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-19494 漏洞名称:Microsoft Exchange Server 欺骗漏洞 漏洞级别:高危 漏洞编号:CV…...
6. C++类的静态成员
一、对象的生产期 生存期:对象从诞生到结束的这段时间生存期分为静态生存期和动态生存期 1.1 静态生存期 对象的生存期与程序的运行期相同,则称它具有静态生存期在文件作用域中声明的对象都是具有静态生存期的若在函数内部的局部作用域中声明具有静态…...
如何使Python Docker镜像安全、快速、小巧
一、说明 在微服务领域,拥有安全、高效和紧凑的 Docker 映像对于成功部署至关重要。本博客将探讨有助于构建此类映像的关键因素,包括不以 root 用户身份运行映像的重要性、在构建映像时更新和升级包、在编写 Dockerfile 指令时考虑 Docker 的层架构&…...
AWS——03篇(AWS之Amazon S3(云中可扩展存储)-01入门)
AWS——03篇(AWS之Amazon S3(云中可扩展存储)-01入门) 1. 前言2. 关于 Amazon S32.1 介绍2.1.1 简述2.1.2 详细介绍 2.2 Amazon S3 好处和功能2.3 3. 创建S3存储桶3.1 创建存储桶3.2 修改访问权限 4. 简单实用4.1 上传图片文件4.2…...
没有synchronized,rust怎么防并发?
学过Java的同学对synchronized肯定不陌生,那么rust里怎么办呢? 在Rust中,可以使用标准库提供的 std::sync::Mutex 来实现加锁功能。Mutex是互斥锁的一种实现,用于保护共享数据在并发访问时的安全性。 下面是一个简单的示例代码&a…...
1.Python简介及安装(3.11.4)
简介 Python 是一种解释型、面向对象、动态数据类型、高级、通用、解释型的高级程序设计语言。 Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。 像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU General Public License) 协议。 官方宣布,…...
face_recognition人脸识别与人脸检测
1、安装face_recognition库 pip install face_recognition face_recognition库的人脸识别是基于业内领先的C开源库dlib中的深度学习模型,安装face_recognition库的同时会一并安装dlib深度学习框架。 2、face_recognition库的使用 1)load_image_file加…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
项目进度管理软件是什么?项目进度管理软件有哪些核心功能?
无论是建筑施工、软件开发,还是市场营销活动,项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素,项目很容易陷入混乱,导致进度延误、成本超支,甚至失败。 项目进度管理软…...
scan_mode设计原则
scan_mode设计原则 在进行mtp controller设计时,基本功能设计完成后,需要设计scan_mode设计。 1、在进行scan_mode设计时,需要保证mtp处于standby模式,不会有擦写、编程动作。 2、只需要固定mtp datasheet说明的接口即可…...
