shell脚本第七阶段--三剑客之awk

学习目标

熟悉awk的命令行模式基本语法结构

熟悉awk的相关内部变量

熟悉awk常用的打印函数print

能够在awk中匹配正则表达式打印相关的行

一、awk介绍

awk是一种编程语言,主要用于在linux/unix下对文本和数据进行处理,是linux/unix下的一个工具。数据可以来自标准输入、一个或多个文件,或其他命令的输出

awk的处理文本和数据的方式:逐行扫描文件,默认从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。

gawl是awk的GUN版本,它提供了Bell实验室和GUN的一些扩展。

下面介绍的Awk是以GUN的awk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。

1.awk使用方式

命令模式语法

awk 选项 'commands' 文件名

常用选项

-F  定义字段分隔符号,默认的分隔符号是空格。   类似与小工具cut自定义分隔符

-V  定义变量并赋值

命令部分

1.正则表达式,地址定位
'/root/{awk语句}'
'NR==1.NR==5{awk语句}'
'/^root/,/^ftp/{awk语句}'
2.{awk语句1;awk语句2;...}
'print $0'
'NR==5{print $0}'
注:awk命令语句间用分号间隔
3.BEGIN...END...
'BEGIN{awk语句};{处理中};END{awk语句}'
'BEGIN{awk语句};{处理中}'
'{处理中};END{awk语句}'
4.引用shell变量需用双引号引起

脚本模式

脚本执行
方法1:
awk 选项 -f awk的脚本文件 需处理的文本文件
awk -f awk.sh filename
方法2:
./awk的脚本文件(或者绝对路径)   需处理的文本文件
./awk.sh filename
脚本编写
#! /bin/awk -f 定义魔法字符
以下是awk引号里的命令清单,不要用引号保护命令,多个命令用分号间隔
BEGIN{FS=":"}
NR==1,NR==3{print $1"\t"$NF}
...

2.awk内部相关变量

变量变量说明备注
$0当前处理行的所有记录
$1,$2,$3...$n文件中每行以间隔符合分割的不同字段
NF

当前记录的字段数

$NF最后一列$(NF-1)表示倒数第二列
FNR/NR行号
FS定义间隔符‘BEGIN{FS=":"}{print 1,3}'
OFS定义输出字段分隔符,默认空格‘BEGIN{OFS="\t"}{print 1,3}'
RS输入记录分割符,默认换行‘BEGIN{RS="\t"}{print $0}'
ORS输出记录分割符,默认换行‘BEGIN{ORS="\n\n"}{print 1,3}'
FILENAME当前输入的文件名

3.awk工作原理

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

1.awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符{RS}结束

2.每行被间隔符:(默认为空格或制表符)分解成字段(或域),每个字段存储在已编号的变量中,从$1开始

问:awk如何知道用空格来分隔字符的呢?

答:因为有一个内部变量FS来确定字段分隔符。初始时,FS赋为空格

3.awk使用print函数打印字段,打印出来的字段会以空格分隔,因为$1,$3之间有一个逗号。逗号比较特殊,它映射为另一个内部变量,称为输出字段分隔符OFS,OFS默认为空格

4.awk处理完一行后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕

4.awk变量定义

awk -v NUM=3 -F: '{ print $SUM }' /etc/passwd
awk -v NUM=3 -F: '{ print SUM }' /etc/passwd

5.awk中BEGIN...END使用

BEGIN:表示在程序开始前执行

END:表示所有文件处理完后执行

用法:'GEBIN{开始处理之前};{处理中};END{处理结束后}'

6.awk和正则的综合运用

运算符说明
==等于
!=不等于
>大于
<小于
>=大于等于
<=小于等于
~匹配
!~不匹配
!逻辑非
&&逻辑与
||逻辑或

awk 'NR>=3 && NR<=8 && $0 ~ /bash$/{print $0}' 1.txt

7.awk的脚本编程

7.1 流程控制语句

if语句:if [ xxx ];then
xxx
fi格式:
{ if(表达式) {语句;语句;...} }例子:awk -F: '{if($3>=500 && $3<=60000) {print $1,$3} }' passwd===============================================================
if...else语句:
if [xxx];thenxxx
elsexxx
fi格式:
{ if(表达式) {语句;语句;...} else {语句;语句;...} }例子:awk 'BEGIN{ if( $(id -u)>=500 && $(id -u) !=65534 ) {print "是普通用户"} else {print "不是普通用户"} }==============================================================
if [xxx];thenxxx
elif xxx
elsexxx
fi格式:
{ if(表达式) {语句;语句;...} else if(表达式) {语句;语句;...}else {语句;语句;...}...}

7.2循环语句

while:
awk 'BEGIN{I=1;while(i<=10){pritn i;i++}}'
awk -F: '{i=1;while(i<=10) {pritn i;i++}}' /etc/passwdfor:
awk 'BEGIN{for(i=1;i<=5;i++){print i} }'
awk -F: '{for(i=1;i<=10;i++) print $0}' /etc/passwd

7.3算数运算

+ - * / %(模) ^(幂2^3)
可以在模式中执行计算,awk都将按浮点数方式执行算术运算
awk 'BEGIN{print 1+1}'
awk 'BEGIN{print 1**1}'
awk 'BEGIN{print 2**3}'
awk 'BEGIN{print 2/3}'

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

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

相关文章

Unity 的游戏循环机制

Unity 的游戏循环机制在 Unity 中&#xff0c;游戏的运行是基于帧的。每一帧都遵循固定的执行顺序&#xff1a;处理输入执行游戏逻辑 (包括 Update、FixedUpdate 和协程)渲染场景显示帧为什么 GameTime.time 在同一帧内不变GameTime.time 是只读属性&#xff1a;它返回的是当前…

算法题(198):数字三角形

审题&#xff1a; 本题需要我们找到数字三角形中的最大路径总值&#xff0c;并输出 思路&#xff1a; 方法一&#xff1a;动态规划 由于本题的路径权值是路径上每一个值累加起来&#xff0c;问题具有阶段重复性&#xff0c;所以我们尝试使用动态规划解决此问题 &#xff08;1&a…

变频器实习DAY42 VF与IF电机启动方式

目录变频器实习DAY42一、工作内容1.1 OF229程序重新烧录和测试二、学习内容2.1 VF与IF电机启动方式1. VF&#xff08;Voltage Frequency&#xff09;启动电机2. IF&#xff08;Current Frequency&#xff09;启动电机总结附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)变频器…

B样条曲线,已知曲线上的某个点到起点的距离,确定这个点的参数u的值的方法

B样条曲线&#xff1a;已知弧长 L 求参数 u 的方法1. B样条曲线定义B样条曲线由以下要素定义&#xff1a;控制点&#xff1a;P₀, P₁, P₂, ..., Pₙ节点向量&#xff08; Knot Vector &#xff09;&#xff1a;U [u₀, u₁, ..., uₘ]曲线次数&#xff1a;k&#xff08;例如…

云计算学习100天-第44天-部署邮件服务器

目录 电子邮件通信——邮件服务器 基本功能 邮件通信的寻址 案例 网络架构 配置server服务器 电子邮件通信——邮件服务器 基本功能 为用户提供电子邮箱存储空间 处理用户发出的邮件——传递给收件服务器 处理用户收到的邮件——投递到邮箱 邮件通信的寻址 根据收件…

计算机视觉(七):膨胀操作

在计算机视觉中&#xff0c;膨胀是一种基本的形态学操作&#xff0c;主要用于处理和分析图像的形状。它通过“膨胀”或“放大”图像中的前景对象来增加其尺寸或连接断开的区域。 膨胀操作的工作原理类似于卷积&#xff0c;但使用的是结构元素 (structuring element)&#xff0c…

playwright+python UI自动化测试中实现图片颜色和像素对比

def compare_image(expect_path, actual_path, output_path, color_diff_threshold10.0,max_diff_pixels100):# 读取图片img1 cv2.imread(expect_path)img2 cv2.imread(actual_path)if img1.shape ! img2.shape:img2 cv2.resize(img2, (img1.shape[1], img1.shape))# ------…

企业级AI应用,Dify集成RAGFlow知识库保姆教程

第一部分&#xff1a;RAGFlow 端配置 在 Dify 能够调用之前&#xff0c;确保 RAGFlow 已经就绪并提供了可访问的 API。 步骤 1: 确保 RAGFlow 正常运行 具体可以参考&#xff1a;https://blog.csdn.net/qq_35354529/article/details/151149191?spm1001.2014.3001.5502 注意启动…

daily notes[9]

文章目录ubuntu notereferencesubuntu note Ubuntu can be written into a stick that boot ubuntu.the stick have the following effects. to install or upgrade Ubuntu include on macto experience the Ubuntu desktop without any actual operation in your OS.Disk Ut…

Java中 String、StringBuilder 和 StringBuffer 的区别?

在Java中&#xff0c;String、StringBuilder 和 StringBuffer 都用于处理字符串&#xff0c;但它们在可变性、线程安全性和性能上有显著区别。以下是它们的对比&#xff1a;1. String不可变性&#xff08;Immutable&#xff09;String 对象一旦创建&#xff0c;内容不可修改。任…

SAM TTS网页官网入口 – 在线版微软tts在线语音合成助手

SAM TTS 是一个免费好用的在线版微软语音合成助手&#xff0c;源自经典的 Windows XP 系统。它通过现代的 JavaScript 技术以在线工具的形式运行&#xff0c;让用户可以直接在线进行语音合成。SAM TTS 不仅保留了 Microsoft SAM 的标志性声音&#xff0c;还新增了更多的自定义选…

2025 大数据时代值得考的证书排名前八​

在大数据时代&#xff0c;数据处理和分析能力愈发关键&#xff0c;考取相关证书能提升职场竞争力。接下来将为大家介绍 2025 年大数据领域值得考取的证书&#xff0c;从含金量、企业认可度、就业方向和薪资等方面分析&#xff0c;助你明晰职业发展路径。CDA 数据分析师认证1、C…

浅谈linux内存管理 的RMAP机制的作用和原理

Linux 内存管理中的 RMAP 机制深度解析反向映射&#xff08;Reverse Mapping, RMAP&#xff09;是 Linux 内存管理中的核心机制&#xff0c;它解决了大型系统中内存管理的效率和扩展性问题。本解析将从作用原理、演进历史、数据结构和工作流程四个维度深入讲解。一、RMAP 核心作…

Duolingo「多邻国」v6.45.3 高级版

Duolingo「多邻国」是一款著名的语言学习应用&#xff0c;可以借助它学习西班牙语&#xff0c;法语&#xff0c;德语&#xff0c;意大利语&#xff0c;俄语&#xff0c;罗马尼亚语&#xff0c;葡萄牙语&#xff0c;土耳其语&#xff0c;荷兰语&#xff0c;爱尔兰语&#xff0c;…

【Unity Shader学习笔记】(五)Unity Shader初识

一、Shader是什么&#xff1f;Shader&#xff08;着色器&#xff09;是一段运行在GPU&#xff08;图形处理器&#xff09;上的特殊程序&#xff0c;它用于控制渲染管线的特定阶段&#xff0c;最终决定物体在屏幕上的最终颜色和效果。与传统运行在CPU上的程序不同&#xff0c;Sh…

计算机视觉与深度学习 | 双目立体特征提取与匹配算法综述——理论基础、OpenCV实践与MATLAB实现指南

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 文章目录 引言 🔍 核心研究问题 理论框架 1. 相机几何模型 2. 特征提…

每青春千度硒仙人掌精粹液:从日常滴饮开始,调出好气色好体质

每天的状态&#xff0c;其实是由许多细节组成的。身体不舒服、情绪波动、气色黯淡&#xff0c;很可能都是体内节奏被打乱的信号。开始在日常中加入几滴每青春千度硒精粹液&#xff0c;是一种小小的尝试&#xff0c;慢慢发现&#xff0c;状态真的在悄悄发生改变。简单滴饮&#…

< 自用文 主机 USC 记录:> 发现正在被攻击 后的自救

环境&#xff1a; 一台 VPS&#xff0c;之前文章推荐过 $1/月 OS: Ubuntu 内存&#xff1a;961MB CPU: 1CORE 上面都是学习 Python 时写的应用&#xff0c;这些应用在 CSDN 都有原码&#xff0c;只是时间久了&#xff0c;自用的有修复bugs&#xff0c;还有些功能升级。 以前是…

硬件开发1-51单片机2-按键、中断

一、GPIO&#xff08;General Purpose Input/Output&#xff09;GPIO 是 51 单片机和外界交互最基本的方式。工作模式&#xff1a;输出模式&#xff1a;单片机给定引脚一个电平&#xff08;高电平 (5V)、低电平 (0V)&#xff09;&#xff0c;通过控制引脚实现高低电平输出。输入…

什么是Token?——理解自然语言处理中的基本单位

在日常生活中&#xff0c;我们使用手机语音助手、自动翻译软件和聊天机器人等智能工具&#xff0c;而这些技术背后都离不开对语言的精细处理。今天&#xff0c;我们就来聊聊“token”这一看似专业的术语&#xff0c;了解它在自然语言处理&#xff08;NLP&#xff09;中的重要作…