嵌入式开发交流网论坛

标题: 号称Linux三剑客老大,抵得上一门语言,这个指令到底牛在哪 [打印本页]

作者: 痴情uu    时间: 2020-11-2 15:30
标题: 号称Linux三剑客老大,抵得上一门语言,这个指令到底牛在哪
awk是一个强大的文本分析工具,其主要工作原理就是将文件内容逐行读取,按照分隔符进行切片,切成多个组成部分,然后将每片保存到内建的变量中。如果指定了模式的话,根据模式匹配是否处理此行内容,若此行文本符合模式,则按照动作处理文本。
以上介绍到了几个关键词,分别是模式和动作,具体意思会放在后面介绍 。
[attach]53910[/attach]
在上面的文本中,通过分隔符将文本内容切割成多个列,那么如果想获取某个列怎么办呢 ?就可以使用$加上第几列的数量就可以。具体如下:
需要注意的是,若切割出的第n列已经没有数据,你继续输出的话就输出了空行 。
[attach]53911[/attach]
awk早期就以在Unix上实现了,现在Linux上所使用的awk其实是gawk,也就是GUN awk,简称为gawk。而在Linux中所使用的是awk其实就是链接到了gawk中了。
语法awk 'Pattern {Action}' file对以上各指令的解析:
[attach]53912[/attach]
变量在介绍完awk的语法之后,我们有必要先了解下awk变量,因为无论是options还是Pattern,都会使用到变量。对于awk来说 ,主要包括内置变量和自定义变量两种。
变量的定义格式:var_name = value
内置变量
[attach]53913[/attach]
变量使用也非常简单,直接使用变量名即可,具体如下:
[attach]53914[/attach]
自定义变量
自定义变量,简单来说就是用户自己定义的变量。在awk中有两种方式可以自定义变量。
方式1:使用-v参数,定义格式为:-v var_name = value .
方式2:在BEGIN模式中定义 。
以上的两种方式,目前还没有涉及到,故我们在下面内容中讲解 。
注意:定义变量最终的目的是要使用变量,那么在awk中怎么使用呢 ? 答案就是使用处直接写变量的名字就可以得到变量的值了 。那么变量一般会在哪使用呢 ? 在后面要讲解到的模式和动作都会用到 。
选项所谓的选项,就是awk后面的options,一般都是通过减号(-) 加上一个英文字符组成,不同英文字符代表不同的意思 。在awk中支持的选项参数也有很多,放在方括号内代表这个选项是可选的。这里主要介绍最常用的。

-F 选项
以下是对-F参数的说明,在此案例中使用英文点(.)作为分隔符,通过分隔符将文本内容分隔成多个部分。
[attach]53915[/attach]
-v 选项
在上面我们介绍-v可以自定义变量,自定义变量时,变量名可以是内置变量也可以用户自己定义的变量名 ,具体定义方式如下:
[attach]53916[/attach]
2)自己定义变量名进行定义
[attach]53917[/attach]

所谓的模式,其实就是Pattern的部分,我们可以将模式理解为条件,在前面介绍到awk是逐行处理的,那怎么判断哪行该处理?哪行不该处理呢 ?答案就是这个模式,当匹配到的模式就是要处理的行,而不匹配的行就会被跳过。
另外,Pattern部分一定要放在引号当中,一般使用单引号引起来。一条awk指令可以包括0个模式或多个模式 ;如果后面有Action ,中间用空格隔开 。
Pattern主要包括以下几个部分:
BEGIN模式
在前面介绍到,BEGIN模式是在处理文本之前的动作,在声明BEGIN时,后面括号内的语句就是BEGIN要执行的操作,
[attach]53918[/attach]
END模式
指定了处理完文本内容之后执行的操作,也就是进行一些收尾工作 。
[attach]53919[/attach]
空模式
空模式其实就是不设置任何模式或条件 ,也就是说对文本的每一行需要执行的处理就是空模式,简单来说空模式就是对行不做过滤处理,具体如下:
[attach]53920[/attach]
关系表达式模式
所谓的关系表达式模式是指包含表达式的模式,通过该表达式对文本行进行过滤处理 。
以下为比较表达式
[attach]53921[/attach]
awk支持的比较运算符还包括:
以下为赋值表达式
[attach]53922[/attach]
awk支持的赋值运算符包括:
支持的算数运算符:
支持布尔类型:
[attach]53923[/attach]
正则模式
所谓的正则模式,其实就是使用正则表达式作为的模式 。所以要想使用这个模式,我们就得熟悉正则表达式,如果你还是对正则表达式不太熟悉,可参考第一章的正则表达式。
使用正则表达式也有一定的规则,具体如下:
awk '/正则表达式/{Action}' file[attach]53924[/attach]
行范围模式
行范围模式,是使用正则表达式来匹配两个关键字之间行的数据,如果这个关键字在文本中出现过多次,那么也会匹配出多次 。它的使用规则如下:
awk '/正则1/,/正则2/{Action}' file所谓的动作,就是Action 的部分,在Action部分主要包括如下几个部分。

在Action中,虽然看语法写的是一个Action,但是在括号内可以有多个执行语句 ;也可以直接编写多个Action动作 。
[attach]53925[/attach]
print语句
在上面已经多次使用到,使用print语句可以输出变量值,在这里就不再赘述 。
printf语句
和print语句类似,但是比print语句更加强大,它的主要作用是可以对文本进行格式化处理,其语法格式为:
printf format,item1,item2 ...
格式符
修饰符
[attach]53926[/attach]
条件语句
如果学习过编程语言,都知道在编程语言中有if ...else语句 ,那么对于awk来说,也是支持if ... else 。在awk支持如下三种情况:
对于以上代码做个简单说明:
[attach]53927[/attach]
循环语句
在awk中,支持的for循环也有三种,分别是for, while,do ... while .具体如下:
# for循环语法格式1:for(初始化;布尔表达式;自增减){//执行代码}# 实例for(i=0;i




欢迎光临 嵌入式开发交流网论坛 (http://www.dianzixuexi.com/bbs/) Powered by Discuz! X3.2