美文网首页运维监控
Linux三剑客(awk-5)-awk的动作(action)

Linux三剑客(awk-5)-awk的动作(action)

作者: 小胖学编程 | 来源:发表于2019-05-16 10:03 被阅读0次

在前文中,我们已经使用用过了awk的选项、模式以及动作

awk动作

如上图所示,红线标注部分就是awk命令中的“动作”。

awk动作

上图中,我们将动作拆分成两个部分。

  • 红线标注为第一部分:最外侧的括号,即"{ }"。
  • 蓝线标注为第二部分:"print $0"。

其实,这两个部分都可以被称为“动作”,只不过它们是不同“类型”的动作而已。

  • print属于输出语句类型的动作;
  • “{ }”其实也是一个动作,只不过,“{}”属于“组合语句”类型的动作。“组合语句”类型的动作的作用是将多个代码组合成代码块。
{}的动作

如上图所示,我们使用了两个大括号"{}",它们属于"组合语句"类型的动作,它们分别将两个print括住,表示这两个print动作分别是两个独立的个体。

组合动作

也就是说,我们可以理解,上图中一共有4个“动作”,两队大括号,两个print,但是上图中,每个大括号中只有一个动作,而我们说过,“组合语句”的作用是将多个代码或多个动作组合成代码块,组合后的代码块被当做一个整体。那么,我们能不能把上图中的两个print动作组合成一个整体?

将两个print组合成一个整体

当我们把多个动作(多段代码)组合成一个代码块的时候,每段动作(每段代码)之间需要用;隔开。

使用;分割动作

1. 控制语句条件判断

条件判断语句
  • "if(NR==1)"中的NR为awk的内置变量,NR为行号之意,所以"if(NR==1)"表示行号为1时,条件成立。
  • "if(NR==1){print $0}"表示行号为1满足条件,条件满足时,打印整行。
最外侧需要有一层大括号

为什么最外侧有大括号。如果非要一个理由,那就是所有动作的最外侧必须用{}括起

if语句中的大括号,也可以执行多个动作,把多个代码当做一个整体,也就是说,如果if所对应的条件成立,则执行if的大括号中的所有命令。

条件成立后,执行括号里面的所有命令

上例中,if对应的大括号中有多条语句,所以if语句中的大括号不能忽略。但是如果if对应的大括号只有一条命令,那么if对应的大括号则可以省略。

还记得我们在前面中使用到的“模式”吗?

模式和动作

上图中的用法为awk的【模式】用法,而这篇介绍的【动作】虽然两者在语法上有所区别,但是达到的目的是相同的。

if else的条件控制语句

if-else模式

上例中,我们使用了“关系表达式”模式,同时,在动作中,使用了“if...else if...else”这样的“控制语句”。

2. 循环语句

for循环

上例中,我们使用了BEGIN模式,BEGIN模式对应的动作中,包含了for循环语句。看到这里,是不是觉得与其他语言中的for循环没有区别。只不过,上例中的for循环语句都写在了一行中而已。

while循环

当while对应的条件满足时,则执行对应的语句的语句,语句执行完成后,对条件修改。

do...while语句

同理,do...while的示例如下,他与while循环的不同之处在于,while循环只有当满足条件时才会执行对应语句,而do...while循环则是无论是否满足条件,都会执行一遍do对应的代码,然后再判断是否满足while中对应的条件,满足条件,则执行do对应的代码,如果不满足条件,则不再执行do对应的代码。

3. 循环跳出条件

  1. 使用continue跳出当前循环
continue跳出当前循环
  1. 使用break跳出整个循环体
break跳出整个循环体
  1. 使用exit退出整个awk命令

在shell中,exit命令表示退出当前脚本,在awk中,它的含义也是类似的,表示不再执行awk命令,相当于退出当前的awk命令。

exit退出awk命令

当在awk中使用了END模式。exit的作用并不是退出整个awk命令,而是直接执行END模式中的动作。

exit退到END命令中
  1. 使用next命令结束当前行
    在awk中,除了能够使用exit命令结束整个awk,还能够使用next命令结束当前行。

我们知道,awk是逐行对文本进行处理的。也就是说,awk会处理完当前行,在继续处理下一行。

使用next命令即可让awk直接从下一行开始处理,换句话说,next命令可以使得awk不继续执行当前操作,而转到下一行。

next命令直接执行下一行

其实,next命令与continue有些类似,只是,continue是针对“循环”而言的,continue的作用就是结束“本次循环”,而next是针对“逐行处理而言的”,next的作用就是结束“对当前行的处理”,从而直接执行“下一行”。本质上awk的逐行处理也可以理解为一种循环,因为awk一直在"循环"处理着"每一行"。

相关文章

  • Linux三剑客(awk-5)-awk的动作(action)

    在前文中,我们已经使用用过了awk的选项、模式以及动作 如上图所示,红线标注部分就是awk命令中的“动作”。 上图...

  • awk

    一、awk 模式和动作 awk程序组成: pattern { action statements } 1.1 ...

  • Linux-grep、sed、awk之awk命令

    参考:Linux三剑客(grep sed awk) 之 awk[https://www.jianshu.com/p...

  • Linux三剑客

    Linux三剑客 标签(空格分隔): Linux grep sed awk [TOC] 在Linux系统当中,处理...

  • linux中awk的复习

    awk使用格式:awk [选项参数] '内容' '{条件} {动作} {条件} {动作}' 示例1:在linux中...

  • awk

    awk的简介和功能 awk: Linux 文本处理三剑客:grep、sed和awk。其中grep是一种文本过滤工具...

  • 实际案例讲解Linux三剑客awk命令!

    说起Linux系统,相比大家一定听过Linux三剑客,它们是grep、sed、awk命令,awk是一个强大的文本分...

  • awk 入门与进阶 part1—快速入门

    awk 的结构 由一个单独的模式–动作语句(pattern-action statement) 组成。 awk的运...

  • day 15

    Linux三剑客之awk 1.1、awk语法及参数 功能说明: awk是一种编程语言,可以用来处理数据和生成报...

  • Linux 三剑客实例详解「grep、sed 、awk」

    简介 Linux 操作文本的三大利器分别是grep、sed 、awk,简称三剑客。 大师兄 awk:最擅长取列;二...

网友评论

    本文标题:Linux三剑客(awk-5)-awk的动作(action)

    本文链接:https://www.haomeiwen.com/subject/eajpaqtx.html