Linux自动化运维(Shell与Ansible)(微课版) 课件 5-3-awk文本处理工具_第1页
Linux自动化运维(Shell与Ansible)(微课版) 课件 5-3-awk文本处理工具_第2页
Linux自动化运维(Shell与Ansible)(微课版) 课件 5-3-awk文本处理工具_第3页
Linux自动化运维(Shell与Ansible)(微课版) 课件 5-3-awk文本处理工具_第4页
Linux自动化运维(Shell与Ansible)(微课版) 课件 5-3-awk文本处理工具_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

sed流编辑器与awk文本

处理工具任务3:awk文本处理工具目录/Contents010203awk工作流程awk基本语法awk内置变量04在awk中使用条件和循环语句05在awk中使用数组06编写并执行awk脚本07awk函数01awk工作流程awk工作流程awk是一种强大的文本处理工具。在Linux和UNIX环境中,awk可提供包括正则表达式匹配、流程控制语句、数学运算符、内置变量和函数等文本处理功能。使用awk,用户可以方便地处理文本数据,完成模式匹配、数据操作、计算和生成报表等各种任务。Unifiedfontsmakereadingmorefluent01读取输入:awk从指定的输入文件或标准输入逐行读取数据。02分割记录:每行数据被分割成一系列字段,字段默认使用空格作为分隔符,但可以通过修改内置变量FS(字段分隔符)来自定义分隔符。每个字段可以通过$1,$2,$3,...来引用,分别表示第一个、第二个、第三个字段,以此类推。03模式匹配:awk逐行遍历记录,并将每一行的数据与用户定义的规则中的模式进行匹配。规则由模式和关联的动作组成。04执行动作:当模式匹配成功时,awk执行与该规则关联的动作。动作可以是一个简单的命令,也可以是一系列复杂的操作。05处理下一行:在完成当前行的处理后,awk继续读取下一行数据,重复上述过程,直到处理完所有输入数据。06输出结果:根据规则中定义的动作,将处理结果输出到标准输出或其他指定的输出文件。输出可以包括整行记录或记录的特定字段,具体内容取决于规则中的动作。awk工作流程awk的工作流程包括从输入文件中逐行读取数据,对每一行应用事先定义好规则(模式和动作),并输出结果,具体工作流程如下。02awk基本语法awk基本语法awk基本语法由一系列由花括号标识的模式和动作组成,其中模式用于匹配输入数据,动作则用于处理匹配的数据。其基本语法如下:

awk'pattern{action}'file其中,file表示要处理的文件,如果省略输入文件,awk会从标准输入读取数据;pattern表示匹配文本的模式,可以是条件或规则,用于匹配输入数据的某种特征;当输入数据符合指定的模式时,执行对应的action表示的动作。可以有多个“模式-动作”组合,每个组合占据一行或多行。awk模式和动作结构awk程序由一个或多个模式及与之关联的动作语句组成。多个操作模式语句由换行符分隔,并使用花括号进行界定,基本结构如下:其中,pattern1表示第1个模式,action1表示与之关联的动作,pattern2和action2表示第二个模式及与之关联的动作,以此类推。程序会按照awk模式和动作的顺序逐行读取输入,对每一行依次检查模式,如果模式匹配成功,则执行与之关联的动作。模式可以是正则表达式、关系表达式、条件表达式等,动作可以是输出、变量赋值、流程控制、内置函数调用等操作。pattern1{action1}pattern2{action2}...patternN{actionN}awk命令选项awk命令可以使用选项和模式来修改其行为和提供额外的功能。常见的awk命令选项或模式元素如表所示:序号选项或模式元素描述1-F用于指定字段分隔符,默认为空格。示例:awk-F':''{print$1}'/etc/passwd2-v用于设置变量的值。示例:awk-vname="John"'{print"Hello,"name"!"}'file.txt3-f用于指定awk脚本文件。示例:awk-fscript.awkfile.txt4''用于引用代码块。示例:awk'$1>3{print$1}'array-number.txt5//用于指定正则表达式。示例:awk'/[0-9]/{print$2}'file.txt6{}定义awk程序中的动作部分,可以包含一个或多个命令,也可以是一个复杂的代码块。示例:awk'{if($1>2){print$1;count++}}'array-number.txt7BEGIN在读取文本文件之前执行的模式,用于进行初始化操作或设置变量。BEGIN模式只执行一次,通常用于执行一些预处理任务,可以用于输出标题、设置计数器、加载配置等任务。示例:awk'BEGIN{print"Startoftheprogram"}{print$0}'file.txt8END在读取文本文件之后执行的模式,awk程序执行结束之后执行,用于进行总结、输出统计结果等操作。END模式只执行一次,通常用于执行一些收尾任务,可以用于输出总计、计算均值、输出最终结果等任务。示例:awk'{line_count+=1}END{print"Linecount:"line_count}'file.tx03awk内置变量awk内置变量awk内置变量是预定义的变量,这些变量用于访问和操作输入数据的不同属性和上下文信息。内置变量可在awk中直接使用,通常以大写字母表示。常见的awk内置变量如表所示:序号内置变量描述1FILENAME当前正在处理的文件。示例:awk'{printFILENAME}'file1.txtfile2.txt2NF当前输入行的字段数量。示例:awk'{printNF}'file.txt3$NF当前输入行的最后一个字段的值。示例:awk'{print$NF}'file.txt4NR当前行的行号(记录号)。示例:awk'{printNR,$0}'file.txt5FNR当前输入文件中的行号。示例:awk'{printFNR,$0}'file.txt6FS指定输入行中字段之间的分隔符,默认是空格或水平制表符。示例:awk-F':''{print$1,$2}'/etc/passwd7$0当前输入行的完整内容,即整行文本。示例:awk'{print$0}'file.txt8$n当前输入行的第n个字段的值。示例:awk'{print$2}'file.txt9OFS输出字段分隔符,默认为空格。示例:awk'BEGIN{OFS=","}{print$1,$2}'file.txt10ORS输出记录分隔符,用于指定输出时记录之间的分隔符,默认为换行符。示例:awk'BEGIN{ORS="\n---\n"}{print$0}'file.txt11ARGC命令行参数的数量。示例:awk'BEGIN{printARGC}'file.txt12ARGV包含命令行参数的数组,每个元素对应一个命令行参数。示例:awk'BEGIN{printARGV[1]}'file.txt04在awk中使用条件和循环语句awk条件语句awk中的条件判断通常使用if语句来实现,if语句根据给定的条件决定是否执行某个代码块。awk条件基本语法:if(条件){

代码块}#文本文件data.txt内容:JohnDoe4500JaneSmith5500AlexJohnson5000#找出薪水大于5000的员工。awk'{if($3>5000)print$0}'data.txtif语句示例:{if($3>5000)print$0}:这是一个awk的动作块。if($3>5000):if语句检查第三个字段(由$3表示)是否大于5000。print$0:如果条件为真(即薪水大于5000),则执行print$0命令,打印出当前行的内容($0代表整行数据)。awk循环语句for(初始化语句;条件;递增语句){

代码块}awk中的循环语句允许多次执行一组语句,以实现重复操作。awk支持for和while两种类型的循环语句。for循环语句的基本语法:for语句示例#假设输入的内容是数字,每个数字占一行awk'{count[$1]++#为每个遇到的数字增加计数}END{for(numincount){#遍历数组

printnum,count[num]#打印数字及其出现次数

}}'count[$1]++:表示使用数组count来记录每个数字(由$1表示,即每行的第一个字段)出现的次数。每次遇到一个数字,就在其对应的数组索引处增加计数。for(numincount):在脚本的END块中,for循环遍历数组count。num是当前的键(本例中是数字),而count[num]是该键对应的值(即数字出现的次数)。printnum,count[num]:对于数组中的每个元素,打印出数字(键)和出现次数(值)。在awk中使用条件和循环语句while(条件){

代码块}while语句的基本语法:while语句示例:awk'BEGIN{print"Enternumbers(enter0tostop):"}{while($1!=0){print"Youentered:",$1getline#读取下一行输入

}print"Encountered0,stopping."exit#遇到0,退出程序}'BEGIN块中的print命令提供了一个简单的提示,告知用户如何操作。while($1!=0):while循环检查当前行的第一个字段($1)是否不等于0。只要这个条件为真,循环就会继续执行。print"Youentered:",$1:打印用户输入的内容。getline:是awk的一个内置函数,用于从标准输入读取下一行数据到当前记录中。使得$1更新为新行的第一个字段。print"Encountered0,stopping."和exit:一旦遇到0,输出一条消息并使用exit命令退出程序。05在awk中使用数组在awk中使用数组在awk中,数组是一种用于存储和操作数据的数据结构,可以通过索引访问和操作元素,这使得处理数据更加灵活和高效。普通数组示例:#单行模式awk'BEGIN{my_array[1]="openeuler";my_array[2]="rhel";my_array[3]="centos";for(iinmy_array)printmy_array[i];}'#多行模式awk'BEGIN{my_array[1]="openeuler";my_array[2]="rhel";my_array[3]="centos";for(iinmy_array)printmy_array[i];}'单行模式中my_array[1]="openeuler";-将数组的第一个元素设置为字符串"openeuler"。my_array[2]="rhel";-将数组的第二个元素设置为字符串"rhel"。my_array[3]="centos";-将数组的第三个元素设置为字符串"centos"。多行模式中for(iinmy_array)使用for循环遍历数组中的每个元素。i是数组索引,对于每个索引,循环内的命令会被执行。printmy_array[i];-在循环体内,这条命令用于打印当前索引i对应的数组元素的值。在awk中使用数组关联数组示例:awk'BEGIN{#声明并初始化关联数组

os["hauwei_openeuler_version"]=22;os["redhat_rhel_version"]=9;os["centos_stream_version"]=9;#访问和输出数组元素

print"Versionofopeneuler:",os["hauwei_openeuler_version"];print"Versionofrhel:",os["redhat_rhel_version"];print"Versionofcentos:",os["centos_stream_version"];}’#输出结果Versionofopeneuler:22Versionofrhel:9Versionofcentos:9awk脚本通过声明一个关联数组os并初始化它的几个元素来存储不同操作系统的版本信息。数组的键是操作系统的名称,值是对应的版本号。使用print命令访问这些数组元素并输出各个操作系统的版本号。06编写并执行awk脚本编写并执行awk脚本awk脚本是一个由awk命令解释并执行的脚本文件。它包含一系列的命令和模式,用于对输入数据进行处理和转换。awk脚本可以通过命令行参数或文件重定向来接收输入数据,并将处理结果输出到屏幕或文件中。awk脚本script.awk示例:#script.awk{sum+=$2;count++;}END{if(count>0){average=sum/count;print"Averageage:",average;}}执行awk脚本命令如下:其中,-f选项指定要执行的awk脚本文件,data.txt指定要处理的输入数据文件。awk-fscript.awkdata.txt07awk函数awk函数awk内置了许多函数,这些函数可以用于处理文本、数值、日期等数据。常见的内置函数有字符串函数length(str)、index(str,substr)、match(str,regexp)、toupper(str),数值函数int(x)、rand、sqrt(x),日期函数systime,等等。使用内置函数lengt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论