Linux脚本awk命令

目录

一. awk命令简介

1. awk版本

2. awk与vim的区别

3. awk与sed的区别

4. awk工作原理

5. awk格式

6. awk常用选项

二. awk基础用法

1. awk基础用法

2. BEGIN和END语句块

3. 指定分隔符

4. 首尾关键字

三. awk内置变量

1. FS变量

2. OFS变量

3. RS变量

4. NF变量

5. NR变量

①. 打印出限定行

②. 打印出偶数或奇数行

③. 打印出范围行

6. 自定义变量

四. awk匹配模式

1. 模式为空

2. 正则匹配

3. NR范围行匹配

4. 关系表达式

五. 条件判断

六. for循环

七. 关联数组

八. awk脚本

九. awk案例

1. 提取分区利用率

2. 提取用户名和uid号

3. 提取/bin/bash结尾的用户并统计个数

4. 提取IP地址

5. 提取出所有普通用户

6. 提取10:00 到 11:00 之间的日志

7. 提取状态次数

8. 统计/etc/fstab文件中每个文件系统类型出现的次数

9. 统计/etc/fstab文件中每个单词出现的次数


一. awk命令简介

1. awk版本

AWK:原先来源于 AT & T 实验室的的AWK

NAWK:New awk,AT & T 实验室的AWK的升级版 

GAWK:即GNU AWK。所有的GNU/Linux发布版都自带GAWK,它与AWK和NAWK完全兼容

在centos7中默认使用的是gawk。

2. awk与vim的区别

awk:文本处理工具,加载一行,处理一行

vim:文本处理工具,将整个文件加载到内存中处理,内存不足文件大小时,打不开文件

3. awk与sed的区别

awk:处理文件内容时,一般以行为处理单位

sed:处理文件内容时,一般以列为处理单位

4. awk工作原理

①. 执行BEGIN{action;… }语句块中的语句

②. 从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,
从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

③. 当读至输入流末尾时,执行END{action;…}语句块

BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中

END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块

pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块

5. awk格式

awk  [选项]  '模式 {处理动作}'

特别注意:awk命令需要使用单引号

6. awk常用选项

选项说明
- F指定分隔符
- v指定自定义变量
- f脚本

二. awk基础用法

1. awk基础用法

注意点:

①. 可以不加导向符,默认读取后面的文件内容

②. 打印的字符串需要加双引号,否则不识别

2. BEGIN和END语句块

①. BEGIN代码块:

在读取文件之前执行,且执行一次

在BEGIN代码块中,无法使用$0或其他一些特殊变量

②. END代码块:

在读取文件完成之后执行,且执行一次

有END代码块,必须有要读取的数据(可以是标准输入)

END代码块中可以使用$0等一些特殊变量,只不过这些特殊变量保存的是最后一轮awk循环的数据

③. main代码块

读取文件时循环执行,默认情况下每读取一行,就执行一次main代码块

main代码块可以有多个

3. 指定分隔符

awk默认是以空格为分隔符,且自带压缩功能

4. 首尾关键字

^加关键字是以这个关键字为开头过滤

关键字加&是以这个关键字为结尾过滤

三. awk内置变量

内置变量说明
FS指定每行文本的字段分隔符,缺省为空格或制表符(tab)。与 “-F”作用相同 -v "FS=:"
OFS输出时的分隔符
NF当前处理的行的字段个数
NR当前处理的行的行号(序数)
$0当前处理的行的整行内容
$n当前处理行的第n个字段(第n列)
FILENAME被处理的文件名
RS行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

1. FS变量

指定每行文本的字段分隔符,缺省(默认)为空格或制表符(tab)。

 "-F" 作用与 -v "FS=:" 相同

注意:-F 与 -FS 一起使用时,-F 的优先级高

2. OFS变量

3. RS变量

在一个文件中,默认的换行符是$,RS的作用是把默认换行符换成指定换行符

4. NF变量

NF的作用是打印每一行有多少个字段

5. NR变量

NR的作用是显示行号

①. 打印出限定行

②. 打印出偶数或奇数行

③. 打印出范围行

6. 自定义变量

四. awk匹配模式

awk  '模式{处理动作}'

PATTERN:根据pattern条件,过滤匹配的行,再做处理

1. 模式为空

如果模式为空,表示每一行都匹配成功,相当于没有额外条件

awk -F: '{print $1,$3}' /etc/passwd

2. 正则匹配

/regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来,固定搭配

模糊匹配,用~表示包含,!~表示不包含

#匹配从以root开头的行到以adm开头的行awk -F: '/^root/,/^adm/{print NR,$1"\t"$3}' /etc/passwd

3. NR范围行匹配

#比较操作符
==, !=, >, >=, <, <=#逻辑
与:&&,并且关系
或:||,或者关系
非:!,取反

4. 关系表达式

关系表达式结果为“真”才会被处理

真:结果为非0值,非空字符串

假:结果为空字符串或0值

五. 条件判断

六. for循环

for(expr1;expr2;expr3) {statement;…}
for(variable assignment;condition;iteration process) {for-body}
for(var in array) {for-body}awk 'BEGIN{sum=0;for(i=1;i<=100;i++){sum+=i};print sum}'
5050for((i=1,sum=0;i<=100;i++));do let sum+=i;done;echo $sum
5050

七. 关联数组

awk的数组为关联数组

awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";print weekdays["mon"]}'awk '!line[$0]++' dupfileawk '{print !line[$0]++, $0, line[$0]}' dupfileawk '{!line[$0]++;print $0, line[$0]}' dupfile

遍历数组:

for(var in array) {for-body}awk 'BEGIN{students[1]="lizong";students[2]="liuzong";students[3]="kunzong";for(x in students){print x":"students[x]}}'
ss -nta|awk 'NR!=1{print $1}'|sortss -nta|awk 'NR!=1{state[$1]++}' ss -nta|awk 'NR!=1{state[$1]++}END{for(i in state){print i,state[i]}}'

八. awk脚本

将awk程序写成脚本,直接调用或执行

[root@centos7 ~]#vim  passwd.awk 
{if($3>=1000)print $1,$3}[root@localhost data]#awk -F: -f passwd.awk /etc/passwd
nfsnobody 65534
zhangsan 1000
mysql 1001[root@centos7 ~]#cat test.awk
#!/bin/awk -f
#this is a awk script
{if($3>=1000)print $1,$3}
[root@centos8 ~]#chmod +x test.awk
[root@centos8 ~]#./test.awk -F: /etc/passwd
nobody 65534
wang 1000
mage 1001

九. awk案例

1. 提取分区利用率

#提取分区利用率df | awk '{print $5}'#去除%,以多位空格和%为分隔符提取
df | awk -F"( +|%)" '{print $5}'df | awk -F"[[:space:]]+|%" '{print $5}'df | awk -F"[ %]+" '{print $5}'df | awk -F"[ %]+" '{print $(NF-1)}'

2. 提取用户名和uid号

#提取用户名和uid号awk -F: '{print $1,$3}' /etc/passwdawk -v "FS=:" '{print $1,$3}' /etc/passwd

3. 提取/bin/bash结尾的用户并统计个数

#过滤以/bin/bash结尾的行并统计个数
awk 'BEGIN {x=0};/\/bin\/bash$/;{x++};END{print x}' /etc/passwd#过滤以非/bin/bash结尾的行并统计个数
awk 'BEGIN {x=0};/\/bin\/bash$/ {x++;print x,$0};END{print x}' /etc/passwd

4. 提取IP地址

#提取当前主机IP地址hostname -I | awk '{print $1}'ifconfig ens33 | sed -n '2p' |awk '{print $2}'ifconfig ens33 | grep mask | awk '{print $2}'ifconfig ens33 | awk 'NR==2{print $2}'

5. 提取出所有普通用户

#提取出普通用户awk -F: '$3>=1000{print NR,$0}' /etc/passwd#过滤出uid号大于等于1000的用户

6. 提取10:00 到 11:00 之间的日志

#提取10:00到12:00之间的日志awk '/10:00/,/12:00/{print $0}' 日志文件

7. 提取状态次数

ss -nta|awk 'NR!=1{print $1}'|sortss -nta|awk 'NR!=1{state[$1]++}' ss -nta|awk 'NR!=1{state[$1]++}END{for(i in state){print i,state[i]}}'

8. 统计/etc/fstab文件中每个文件系统类型出现的次数

cat /etc/fstab | grep -v '^#' | grep -v '^$' | awk '{print $3}' | sort | uniq -c

9. 统计/etc/fstab文件中每个单词出现的次数

grep -Eo "\b[a-zA-Z]+\b" /etc/fstab | wc -l

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

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

相关文章

30、LCD1602

LCD1602介绍 LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是一种字符型液晶显示模块&#xff0c;可以显示ASCII码的标准字符和其它的一些内置特殊字符&#xff0c;还可以有8个自定义字符 显示容量&#xff1a;162个字符&#xff0c;每个字符为5*7点阵 …

理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory

Spring是一个包含众多工具等Ioc容器 对象这个词在Spring范围内&#xff0c;称为bean Spring两大核心思想 1.IOC (IOC是控制反转&#xff0c;意思是控制权反转-控制权&#xff08;正常是谁用这个对象&#xff0c;谁去创建&#xff0c;&#xff09;-控制对象的控制权&#xf…

轻量封装WebGPU渲染系统示例<41>- 前向渲染的雾(Fog)效果(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/FogTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#xff1a; export class FogTest {private mRscene new Rend…

优化你的计算机性能:如何根据 CPU 占用率决定硬件升级

优化你的计算机性能&#xff1a;如何根据 CPU 占用率决定硬件升级 一、引言二、CPU 占用率的意义与影响三、监测和评估 CPU 占用率四、判断硬件升级需求的依据五、硬件升级方案和建议六、总结 一、引言 计算机性能优化是提升计算机系统整体效能的过程&#xff0c;它对于用户和…

React立即更新DOM

正常情况下&#xff0c;react会等待set完毕后再进行页面渲染&#xff0c;所以在set时无法拿到更新后的dom import { useRef, useState } from "react"export default () > {const div useRef(null)const [count, setCount] useState(0)const btnClick () >…

各大期刊网址

AAAL: http://dblp.uni-trier.de/db/conf/aaai/ CVPR: http://dblp.uni-trier.de/db/conf/cvpr/ NeurlPS:http://dblp.uni-trier.de/db/conf/nips/ ICCV: http://dblp.uni-trier.de/db/conf/iccv/ IJCAL: http://dblp.uni-trier.de/db/conf/ijcal/ 并非原创引…

微机原理——定时器8253(8254)学习2应用与设计

目录 简要说明 用户扩展的定时计数器应用举例 1 8254作测量脉冲宽度 2 8254作定时 3 8254作分频 4 8254同时用作计数与定时 硬件设计 ​编辑软件设计 微机系统中定时计数器应用举例 5 计时器设计 硬件设计 软件设计 6 发生器设计 硬件设计 软件设计 简要说明 定…

LinuxBasicsForHackers笔记 --网络分析和管理

使用 ifconfig 分析网络 ifconfig – ifconfig 命令是用于检查活动网络接口并与之交互的最基本工具之一。只需在终端中输入 ifconfig 即可使用它来查询当前活动的网络连接。命令输出的顶部是第一个检测到的接口的名称。第二行包含当前分配给该网络接口的 IP 地址的信息&#x…

网上商城、宠物商城源码(Java)

javaWebjsp网上书城以及宠物商城源码&#xff0c;功能有购物车、收藏以及下单等等功能 带后台管理功能 运行示意图&#xff1a;

iOS 自动签名打包,并用脚本上传appstore

背景&#xff1a; 1&#xff09;测试环境给测试&#xff0c;产品&#xff0c;或者其他业务人员打测试包时&#xff0c;经常存在需要添加设备&#xff0c;不得不重新生成描述文件&#xff0c;手动去更新打包机描述文件配置 2&#xff09;证书&#xff0c;描述文件过期造成打包失…

STM32-SPI 中断

SPI协议 1.1 SPI总线介绍 SPI接口是Motorola &#xff08;motorola | Smartphones, Accessories & Smart Home Devices&#xff09;首先提出的全双工三线/四线同步串行外围接口采用主从模式&#xff08;Master Slave&#xff09;架构。 时钟由Master控制&#xff0c;在时钟…

垃圾回收与内存泄漏

前端面试大全JavaScript垃圾回收与内存泄漏 &#x1f31f;经典真题 &#x1f31f;什么是内存泄露 &#x1f31f;JavaScript 中的垃圾回收 &#x1f31f;标记清除 &#x1f31f;引用计数 &#x1f31f;真题解答 &#x1f31f;总结 &#x1f31f;经典真题 请介绍一下 Jav…

P7 链表 链表头前方插入新节点

目录 前言 01 链表头插入数据 示例代码 02 指定节点前方插入新节点 测试代码 前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C》✨✨✨ &#x1f525; 推荐专栏2: 《 Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨…

Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据

写在前面&#xff1a; 根据Web项目开发需求&#xff0c;需要在H5页面中&#xff0c;通过点击视频列表页中的任意视频进入视频详情页&#xff0c;然后根据视频的链接地址&#xff0c;主要是 .mp4 文件格式&#xff0c;在进行播放时实时的显示该视频的音频轨道情况&#xff0c;并…

史上最全低代码平台盘点!三分钟盘点2023年顶尖二十个低代码平台!

史上最全低代码平台盘点&#xff01;三分钟盘点2023年顶尖二十个低代码平台&#xff01; 什么是低代码平台&#xff1f;2023年顶尖二十大低代码平台&#xff0c;哪个值得一试&#xff1f;低代码平台应该如何选择&#xff1f;本篇&#xff0c;我们将为大家盘点顶尖的十大低代码平…

分享一个简单的基于C语言嵌入式GUI界面切换代码

目录 前言 一、数据类型 二、页面调度 三、页面显示 四、视频展示 前言 最近在用LVGL写一个简单的UI界面&#xff0c;需要进行几个页面的切换&#xff0c;所以就自己写了一个简单页面切换代码&#xff0c;方便进行页面切换&#xff0c;同时使UI代码结构更加清晰。这个结构…

非常好的简历精选7篇

想要打造一份令人眼前一亮的简历&#xff0c;赢得招聘方的青睐&#xff1f;参考这7篇精选的“非常好的简历”案例&#xff01;无论是应届毕业生还是职场人士&#xff0c;都能从中借鉴灵感&#xff0c;提升简历质量。让求职之路更加顺畅&#xff0c;轻松斩获心仪职位&#xff01…

【java毕业设计源码】基于SSM框架的在线智能题库管理系统设计与实现

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#xff1a…

智能优化算法应用:基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.入侵杂草算法4.实验参数设定5.算法结果6.参考…

c# OpenCV安装(一)

一 通过NuGet 安装四个拓展包 OpenCvSharp4、OpenCvSharp4.Extensions、OpenCvSharp4.runtime.win、OpenCvSharp4.WpfExtensions C#使用OpenCV的一些代码 需要加头文件 using OpenCvSharp; //为了使用opencv using Point OpenCvSharp.Point; //为了确定我们使用的poin…