awk是Linux系统中除了sed命令之外的又一个强大的数据处理工具。下面,小编小编将从几个方面对Linux的awk命令进行详细阐述,希望对大家有所帮助。与sed命令类似,awk命令也是逐行扫描文件(从第一行到最后一行),寻找包含目标文本的行,如果匹配成功,则执行用户想要的操作在线执行;否则,该行将不会被执行。任何处理。当awk读取文件内容的每一行时,它会比较该行是否匹配给定的模式。如果匹配,则执行处理过程,否则不处理该行。如果没有指定处理脚本,匹配的行将显示到标准输出,即默认的处理动作是print打印该行;如果不指定模式匹配,则默认匹配所有数据。awk有两种特殊的模式:BEGIN和END,分别放在读取任何数据之前和读取完所有数据之后执行。在读取文件内容之前,会执行BEGIN后面的指令,然后读取文件内容,判断是否匹配特定模式,匹配则执行正常模式后的动作指令,最后执行ENDpattern命令,并输出文件处理后的结果。awk的工作流程如图1所示,awk命令的基本语法格式如下:[root@liangxu~]#awk[option]'scriptcommand'filenameawk命令常用选项及其作用如图表2.选项功能-Ffs指定fs作为输入行的分隔符,awk命令默认分隔符为空格或tab-ffile从脚本文件中读取awk脚本命令替换在命令参数中输入处理脚本-vvar=val在执行进程之前,设置一个变量var,并赋予其设备初始值val-Wcompat以兼容模式运行awk,GUN扩展选项将被忽略-WcopyleftoutputashortGUNcopyrightmessage-Wdump-variables[=file]将全局变量(变量名、类型、值)打印到一个文件中,如果没有提供文件名,将自动输出到一个名为dump-variables的文件中。awk的脚本命令主要由2部分组成,分别是匹配规则和执行命令。awk的匹配规则与sed命令中的地址部分相同,用于指定脚本命令可以作用的文本内容中的具体行,可以用字符串或正则表达式指定。另外,整个脚本命令使用单引号(''),执行命令部分需要用花括号“{}”括起来。注意awk程序在执行时,如果没有指定执行命令,默认会输出匹配的行;如果不指定匹配规则,则默认匹配文本中的所有行。awk的主要特性之一是它能够处理文本文件中的数据,自动为每一行中的每个数据元素分配一个变量。awk内置的变量和函数如表3所示。变量函数$0当前记录$1~$n当前记录的第n个字段ARGC命令行参数号FILENAME当前输入文档的名称FNR当前输入文档的当前记录号特别是当有多个输入文档时有用NR输入流当前记录数NF当前记录的字段数FS字段分隔符OFS输入字段分隔符,默认为空格ORS输入记录分隔符,默认为换行符nRS输入记录分隔符,默认为换行符n【例1】输出当前文档的当前行号。创建一个sample文件,命名为text,在sample文件中写入如下内容:http://www.lxlinux.net/1234在终端页面输入如下命令:[root@liangxu~]#awk'{printFNR}'text123表达式由变量、常量、函数、正则表达式和运算符组成。awk中的变量包括字符变量和数值变量。如果awk中定义的变量未初始化,则初始值为空字符或0。操作字符时必须使用引号。运算符及其含义如表3所示。运算符含义+加-减*乘/除%余数^求幂+自增1--自减1+=加法后变量赋值=加法后变量赋值减法=乘法后赋值给变量/=除法后赋值给变量>大于<小于>=大于或等于<=小于或等于=等于!=不等于~匹配正则表达式!~不匹配正则表达式&&与II或例如awk赋值运算符,a+5等价于a=a+5,如下:[root@liangxu~]#awk'BEGIN{a=2;a+=2;printa}'4另外,awk还支持if条件判断,while和for循环语句等。1)if条件判断语句。if语句有两种基本格式:if(expression)action1elseaction2orif(expression)action1;elseaction2如果表达式的判断结果为真,则执行action1,否则执行action2。比如判断boot分区的可用容量小于20MB时,会发出告警,否则显示OK,如下图:[root@liangxu~]#df|grep“启动”|awk'{if($4<20000)打印“警报”;elseprint"OK"}'OK2)while循环语句。while循环语句有两种基本格式:while(condition)action或doactionwhile(condition)while循环语句如下:[root@liangxu~]#awk'i=1{}BEGIN{while(i<=10){++我;printi}}'1234...10113)for循环语句。for循环语句的基本格式如下:for(variable;condition;counter)actionfor循环语句如下:[root@liangxu~]#awk'BEGIN{for(i=1;i<=10;i++)printi}'123...910以上就是良序教程网为各位小伙伴分享的Linuxawk命令详解。以上就是良序教程网为各位小伙伴们分享的Linux相关知识。
