awk 命令详解

article/2025/9/16 22:46:17

目录

一、awk概述

二、awk 工具原理

三、awk内置变量

四、awk用法示例

1、awk常用内置变量

2、BEGIN、END的用法

3、模糊匹配

4、数值与字符串的比较

5、逻辑运算&&和||

6、其他内置变量的用法

7、awk高级用法

      定义引用变量

     awk通过管道符号、双引号调用shell命令

     查看内容百分比

     查看CPU利用率

     查看重启时间

     调用w命令,并用来统计在线用户数

 8、套用数组

五、总结


引言:awk是功能强大的编辑工具它是专门为文本处理设计的编程语言,也是处理软件,通常用于扫描、过滤、统计汇总工作,数据可以来自标准输入也可以是管道或文件。grep,sed,awk 更是Shell 编程中经常用到的文本处理工具, 被称之为Shell 编程三剑客。

一、awk概述

功能强大的编辑工具

无交互的情况下实现复杂的文本操作

命令格式

awk 选项 '模式或条件 {编辑命令}' 文件1 文件2

awk -f 脚本文件 文件1 文件2

二、awk 工具原理

当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出
如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执行多少次

逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令

sed 与awk的区别

sed命令常用于一整行的处理,而awk比较、倾向于将一行分成多个""字段"然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。

三、awk内置变量

awk 包含几个特殊的内建变量(可直接用)如下所示:

FS指定每行文本的字段分隔符,缺省为空格或制表位
NF当前处理的行的字段个数
NR当前处理的行的行号(序数)
$0当前处理的行的整行内容
$n当前处理行的第n个字段(第n列)

四、awk用法示例

按行输出文本

按字段输出文本

通过管道、双引号调用shell 命令

 打印文本内容

 以: 为分隔符,打印第一列

 也可以以x为分隔符,打印第一列

以冒号为分隔符,打印第1列和第3列{$1,$3}有空格效果也可以" " 也会有空格 

定义多个分隔符,只要出现一个字符就可以作为分隔符     以 :和/ 为分隔符

1、awk常用内置变量

$1代表第一列
$2代表第二列以此类推
$0代表整行
NF一行的列数
NR行数

打印包含root的行 $0 整行     $1:第一列    

打印以:和/ 为分隔符且包含root的行的列数 

打印以:和/ 为分隔符 包含root的行数

打印以:为分隔符包含root的行数和整行内容

打印第二行       打印第二行以:为分隔符打印第一列

 打印最后一列

打印显示行号和整行内容

 打印显示汇总行数以及打印汇总最后一行内容

以:为分隔符打印文本内容有多少行和多少列 

查询本机的网卡IP,与使用流量

 显示磁盘可用空间

打印出第二行的第四列 

2、BEGIN、END的用法

逐行执行开始之前执行什么任务,结束之后再执行什么任务,用BEGIN、END

BEGIN:一般用来做初始化操作,仅在读取数据记录之前执行一次
END:一般用来做汇总操作,仅在读取完数据记录之后执行一次

BEGIN的运算案例:

 定义变量打印输出结果

 不定义变量,初始值为0,如果是字符串为空

 2**3和2^3 为2的3次方

3、模糊匹配

用~表示包含,!~表示不包含

 打印出第一列包含root和ro的行

 打印显示不包含结尾是nologin,打印出第一列和第7列

4、数值与字符串的比较

比较符号:==      !=       <=       >=      <       >

打印显示第五行 

打印显示小于五行的内容

 以:为分隔符打印显示第三列为0 的内容

精确查找,$1 第一列一定是root的行显示 

查询第3列大于1000的内容并显示(其中1000以上的值表示普通用户)

5、逻辑运算&&和||

||:或 表示同时满足

&&:且  满足一个即可

打印显示第三列小于10或第三列大于等于1000的行

 打印显示大于4行且小于10行的内容 也就是5-9行的内容

 输出数字1~200,打印显示第一列能被7整除的数且包含数字7

6、其他内置变量的用法

NF字段个数 (读取的列数)
NR记录数(行号)从1开始,新的文件延续上面的计数,新文件不从1开始
FNR读取文件的记录数(行号)从1开始,新的文件重新从1开始计数
FS

输入字段的分隔符 ,默认为空格

OFS

输出的字段分隔符 默认为空格

RS输入行分隔符,默认为换行符
ORS输出行分隔符,默认为换行符

案例

OFS定义输出时以:为分隔符,$1,$2用,分开  OFS输出时定义分隔符------ 打印出第一列和第二列 

 FNR和NR的区别​​​​​​​   FND读取文件的行号,从1开始新文件也是从1开始   打印出2个文件的内容

 以:为换行符,打印整行内容

 以空格为分隔符,输出为多行合并,默认为回车键

7、awk高级用法

定义引用变量

调用函数getline:读取一行数据的时候并不是得到当前行而是当前行的下一行

 awk通过管道符号、双引号调用shell命令

echo $PATH | awk 'BEGIN{RS=":"};END {print NR}’
#统计以冒号分隔的文本段落数,END语句块中,往往会放入打印结果等语句

awk -F: '/bash$/{print | "wc -l")' /etc/passwd
#调用wc -l命令统计使用bash 的用户个数,等同于grep -c "bash$" /etc/passwd
awk -F: ‘/ bash$/ {print}' pasawd l wc -l

查看内容百分比

 free -m l awk '/Mem:/ {print int($3/($3+$4)*100)"%")′

​​​​​​​

free -m|awk ‘/Mem:/ {print $3/$2*100}'
free -m | awk '/Mem:/{print $3/$2*100}' | awk -F. '{print $1"%"}'
比较后取整

 查看CPU利用率

top -b -n 1 l grep Cpu | awk -F, {print $4}' l awk '{print $1}′​​​​​​​#查看当前cPv空闲率,(-b -n1表示只需要1次的输出结果)       CPu使用率cpu_us=`top -b -n 1 l grep Cpu | awk '{ print $2}`cpu_sy=`top -b -n 1 | grep Cpu | awk -F, '{print $2}' | awk '{print $1}'`cpu_sum=$ (($cpu_us+$cpu_sy))echo $cpu_sum

查看重启时间

last 是你关机或重启的记录,last | tail -1 是最后一次关机或重启的时间;
开机时间记录在/proc/uptime中可用
date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"
来查看开机时间,和运行时间。(+号前面有空格)

 显示上一次重启时间

 调用w命令,并用来统计在线用户数

 8、套用数组

echo "A B C D" l awk '{OFS="I"; print $0;$1=$1 ;print $0} '    

​$1-$1是用来激活$0的重新赋值,也就是说字段$1...和字段数NF的改变会促便awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做     

awk ‘BEGIN{a[0]=10;a[1]=20; print a[1]}’awk 'BEGIN{a[o]=10;a[1]=20; print a[o]'awk 'BEGIN{a[ "abc"]=10; a["xyz"]=20;print a ["abc"]}'awk 'BEGINia [ "abc"]=10;a ["xyz"]=20; print a["xyz"]}’awk 'BEGIN{a ["abe"]="aabbcc"; a["xyz"]="xyyzz" ; print a ["xyz"]}'awk 'BEGIN{a[0]=10;a[1]=20;a[2]=30;for(i in a){print i,a[i]}}'

​PS1:BEGIN中的命令只执行一次

PS2: awk数组的下标除了可以使用数字,也可以使用字符串,字符串需要使用双引号

使用awk统计httpd访问日志中每个客户端IP的出现次数      

awk '(ip[$1]++);END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log

注:定义数组,数组名称为ip,数字的下标为日怎文件的第1列(也就是客户A的i?地址),+t的目的在于对客户端进行统计计数,客户端IP出现―次计数器就加i。END中的指令在读取完文件后执行,通过循环将所有统计信息输出,for循环遍历的是数组名ip的下标。

 脚本编写访问主机超过几次报警

#!/bin/ bash
x='awk '/Failed password/{ip[$11]++};END{for(i in ip) (print i","ip[i]}}’/var/log/secure'
#190.168.80.13 3
for j in $x
do
ip= "echo $j l awk -F ", " '{print $1}"
num="echo $j l awk -F ", " '{print $2} "
if[ $num -ge 3 ];then
echo“警告$ip访问本机失败了$num次,请速速处理!”
fi
done

五、总结

本篇主要列举了很多关于awk的案例,让读者更清楚的了解awk的每个参数的用法以及格式,还有以及awk的工作原理,以及awk是一个功能强大的编辑工具无交互的情况下实现复杂的文本操作。


http://chatgpt.dhexx.cn/article/9DJNtJWv.shtml

相关文章

如何选择适合你的项目管理认证

前言 越来越多的小伙伴开始去考项目管理认证&#xff0c;目前互联网行业内主流的项目管理认证还是PMP的认证。 我想从几个方面来深度讲一讲项目管理认证的内容和价值&#xff0c;帮助大家做一个选择和辨别&#xff0c;避免在众多的项目管理认证中迷失了方向&#xff0c;一不小…

【敏捷方法落地之旅】-PMI_ACP敏捷认证交流会

会议名称&#xff1a;PMI_ACP敏捷认证交流会 会议时间&#xff1a;3月26日(星期六)14:00-16:30 会议举办具体地址&#xff1a;黄浦区成都北路500号峻岭广场16楼 票价&#xff1a;免费 参会规模(人数)&#xff1a;50 会议主办方&#xff1a;光环国际 一、会议简介 项目管…

CSM(Certified Scrum Master) 敏捷认证是什么?

Scrum 是用于开发和持续支持复杂产品的一个框架。Scrum 基于试验性过程控制理论&#xff0c;借鉴了精益思想、时间盒、模块化设计等&#xff0c;并完整地体现了敏捷宣言和敏捷原则。Scrum 采用一种迭代、增量式的方法来优化对未来的预测和管理风险&#xff0c;建立组织响应变化…

权威的国际敏捷认证Certified Scrum Master (CSM)

权威的国际敏捷认证Certified Scrum Master (CSM) A. 认证前 在学习Certified Scrum Master (CSM)之前,你需要了解: 什么是CSMCSM认证与其他敏捷认证有什么区别常见问题CSM培训课程大纲1. 什么是CSM 什么是Certified Scrum Master (CSM)2. Scrum国际敏捷认证 敏捷认证的对比…

PMI-ACP敏捷认证:敏捷开发的6个实战经验

敏捷开发,相对传统软件开发模式,它主要是针对快速变化的需求,不断优化管理流程,最终推出优质软件。 1. 快速迭代 相对那种半年一次的大版本发布来说,小版本的需求、开发和测试更加简单快速。一些公司,一年仅发布仅2~3 个版本,发布流程缓慢,它们仍采用瀑布开发模式,更严…

2021PMI-ACP®国际敏捷项目管理师认证招生简章

敏捷管理专业人士&#xff08;PMI-ACP&#xff09;认证要求敏捷培训、敏捷项目工作经验以及包含敏捷实践、工具、技巧考试的结合&#xff0c;结合了其他敏捷方法&#xff0c;包括SCRUM&#xff08;敏捷开发&#xff09;&#xff0c;XP&#xff08;极限编程&#xff09;和Lean D…

Scrum master敏捷认证全真试题截图PDF CSM敏捷认证考题真题题目试题2022年试题和答案下载

Scrum master敏捷认证全真试题截图PDF CSM敏捷认证考题真题题目试题2022年试题和答案下载 一、CSM敏捷认证简介 更多的介绍大家可以自行去百度搜索了解一下。 市面上的敏捷认证有两个&#xff1a; 一个是PMI的PMI-ACP认证&#xff1b; 一个是Scrum联盟的Certificated Scrum…

记一次CRM敏捷认证培训学习总结

前言 最近公司组织了一次关于CRM敏捷认证的培训和考试活动。为了加深记忆和留待以后回顾复习&#xff0c;也为了想要了解敏捷的同学提供一定的帮助&#xff0c;特此写了一篇关于敏捷培训的总结。 学习链接&#xff1a; Scrum指南2020版本下载地址&#xff1a;https://scrumgui…

敏捷认证_新敏捷–认证

敏捷认证 上次我们看情况如何。 事情如何在滑雪胜地的一群软件开发人员之间汇聚&#xff1a;在该领域进行了实际实验&#xff0c;并取得了成功。 有一个沟通渠道可以传播这些想法。 现在有了共同的愿景和名字。 除非肯施瓦伯 &#xff08; Ken Schwaber &#xff09;具有精明的…

C语言之#include用法详解

学习Linux C&#xff0c;必须要理解include&#xff0c;只要弄清以下几个问题&#xff0c;就能完全理解include了&#xff01; 1.#include 实质是什么&#xff1f; 预编译的时候copy include头文件的内容到当前行 &#xff08;疑问&#xff1a;预编译命令 $gcc -E test.c -o …

CMake中include的使用

CMake中的include命令用于从文件或模块(file or module)加载并运行CMake code。其格式如下&#xff1a; include(<file|module> [OPTIONAL] [RESULT_VARIABLE <var>][NO_POLICY_SCOPE]) 从给定的文件加载并运行CMake code。变量读写访问调用者的范围(Variable rea…

Makefile基础教学(include的使用方法)

文章目录 前言一、include在makefile中的概念介绍二、include使用示例三、include中需要注意的一些操作1. 在include前加-选项2. include触发规则创建了文件会发生什么3. include包含的文件夹存在 总结 前言 本篇文章将讲解include的使用方法&#xff0c;在C语言中使用include…

django urls include用法

在Django框架中&#xff0c;提供了非常清晰简洁的url管理方法&#xff0c;在新建一个project之后(此处为myproject),然后在项目中建立一个app(此处为myapp)&#xff0c;会看到有如下的目录结构&#xff1a; 一般所熟知的就是在myproject/myproject/urls.py中的urlpatterns列表中…

#include的使用方法

include的作用&#xff1a; #include叫做“文件包含” / include 语句包含并运行指定文件。 功能&#xff1a;它的功能是用来指定文件的全部内容替换程序中的命令行&#xff0c;从而使指定的文件与当前源文件连成一个源文件 书写格式&#xff1a; #include <文件名> …

移位密码及其python实现

就当为CSDN这方面的python开源做点贡献哈哈哈 移位密码 算法原理 ​ python代码 #移位密码 class ShiftCipher:global dddict(zip(.join(chr(i) for i in range(97,123)),list(range(0,26))))#字母表def __init__(self,k:int):self.kk;#k为移位数def encrypt(self,m:str):#加…

python编写移位密码实现加密与解密

python编写移位密码实现加密与解密 移位密码 参考代码&#xff0c;通过列表和ASCII实现&#xff1a; def encrypt(s,key):l list(s);l1 list();for i in l:if i.isalpha():k (ord(i) - 97 key) % 26 97;l1.append(chr(k));else:l1.append(i);s1 .join(l1)print(encrypte…

C++移位密码

C移位密码 这里/**移位密码*/ #include C移位密码欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建…

CTF-密码学-位移密码

题目&#xff1a;位移密码 一步之遥 读题&#xff1a;小明说b3W6f3FzOHKkZ3KiN{B5NkSmZXJ5[ERxNUZ5Z3ZyZ{Gn[kWigR>> 说完&#xff0c;然后他就以64m每秒的速度溜了。 flag格式为SeBaFi{xxx} 审题&#xff1a;考察移位密码&#xff0c;题目提示64m/s的速度&#xff0c;联…

简单密码位移

好久不见啊~~~最近事比较多&#xff0c;所以小生啊&#xff0c;大概是变的懒了&#xff0c;不说废话啦 今天小生和大家分享一下 Java 编写 简单密码位移&#xff0c; 一、要求 二、基本实现功能 三、源代码 已分享至百度云盘&#xff0c;微信回复&#xff1a; 02 &#xff0…