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

在前文中,我们已经使用用过了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一直在"循环"处理着"每一行"。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • awk awk****推荐去看朱双印的博客“awk****从放弃到入门”,写的真的很好,本文的awk****就总结...
    凯睿看世界阅读 1,350评论 1 14
  • awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...
    BossHuang阅读 1,456评论 0 9
  • 本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...
    楠人帮阅读 1,267评论 0 8
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,743评论 0 10
  • 小鱼儿早起穿袜子的时候,才发现所有的芭蕾袜左脚拇指那儿都破了一个洞,整堂舞蹈课,小鱼儿都心不在焉,搞的俞老师大声呵...
    岚翕夜行阅读 588评论 1 2