awk命令的使用语法
awk [options] ‘{pattern + action}’ {filenames}

在之前的文章中,action最常使用的是打印输出,示例:
linux三剑客awk命令详解之动作(action)
这里的动作’{print $2}‘可拆分成两部分去理解:
1)’{ }’ 最外层的花括号属于‘组合语句’类型的动作,即将多个代码组合成代码块,比如条件语句代码块、循环语句代码块。
2)‘print $2’ 属于‘输出语句类型的动作’,即执行特定的动作。
当awk命令语句中有两个分开的花括号,可以把这两个花括号看成两个独立的个体,示例如下:
linux三剑客awk命令详解之动作(action)
当然,上述命令也可以放在一个花括号内,将多个动作组合成一个整体,需要注意的是多个动作之间要用分号’;'间隔开,示例如下:
linux三剑客awk命令详解之动作(action)
当然,对于上述命令中的printf动作来说,可以使用一条语句就可以实现:
linux三剑客awk命令详解之动作(action)
控制语句动作

除了简单的输出语句动作,awk命令也支持控制语句动作,如条件判断语句,示例如下:

if条件判断语句

  • 单分支语句
    linux三剑客awk命令详解之动作(action)
    ⚠️最外面的花括号属于组合语句动作系列,而里面的花括号可以看作是条件判断语句的一部分。
  • 双分支语句
    linux三剑客awk命令详解之动作(action)
  • 多分支语句
    linux三剑客awk命令详解之动作(action)
    awk命令中的动作action同样支持循环控制语句,如while,do/while,for,break,continue,这些关键字的语义与其他编程语言完全相同。

for循环语句

对每一行的第二列重复输出3次
linux三剑客awk命令详解之动作(action)
上述功能同样可以使用while循环语句来实现:
linux三剑客awk命令详解之动作(action)
while语句需要注意的是
1)首先需要对变量进行初始化,默认会初始化为0
2)读完文本内容的一行及满足while循环退出条件后,需要将条件置为初始状态,才能正确的去执行下一行内容,否则,不满足循环的条件,没有任何的执行操作,如上图中的黄线部分,若没有,则只3次输出第一行的内容,如下图所示:
linux三剑客awk命令详解之动作(action)
awk中的数组

awk可以看作一门脚本语言,它包含脚本语言的各种语法结构,如条件判断语句、循环语句等。当然,awk也可以使用数组。

1)在awk命令中,使用数组不需要先声明,也不需要声明大小,类似于C++中的vector,直接为数组中的元素进行赋值即可,示例如下:
linux三剑客awk命令详解之动作(action)
图中,红线部分是对name数组进行赋值,黄线部分是读取name数组中的元素,这里使用for循环来遍历数组中的元素,与其他脚本语言遍历元素的方式一致。

2)数组的索引可以是数值,也可以是字符串,这与字典的格式类似了,就像一个key-value对,因为awk中的数组是“关联数组”示例如下:
linux三剑客awk命令详解之动作(action)

当然也可以使用delete来删除数组元素,示例如下:
linux三剑客awk命令详解之动作(action)
由于该索引的元素被删除了,所以只输出了换行。
3)当数组元素不存在时,如果我们直接引用这个不存在的元素,awk会自动创建这个元素,并且默认为这个元素赋值为空字符串,当然,也可以将数组元素设置为空,示例如下:
linux三剑客awk命令详解之动作(action)
linux三剑客awk命令详解之动作(action)
图中红色画线部分是设置数组元素为空字符串,蓝色画线部分是输出一个不存在的数组元素,从结果可以看出,结果打印输出了一个空字符串。

这说明判断数组元素是否存在时,不能使用空字符串来判断,可以使用语法"if (下标 in 数组名)",来判断元素是否存在于数组中,示例如下:
linux三剑客awk命令详解之动作(action)
数组应用于最广泛的就是统计文本中某些字符出现的次数,示例如下:
linux三剑客awk命令详解之动作(action)
上述命令是统计第二列每个字符出现的次数。

总结:

awk命令的动作部分支持控制语句、可以自定义变量、支持数组等结构内容,使其像一个脚本语言一样可以实现很多强大的功能。

相关文章:

  • 2022-02-10
  • 2022-12-23
  • 2021-09-30
  • 2022-12-23
  • 2021-04-21
  • 2021-05-01
  • 2022-12-23
猜你喜欢
  • 2021-06-15
  • 2021-05-27
  • 2022-12-23
  • 2022-01-24
  • 2021-09-12
  • 2022-01-26
相关资源
相似解决方案