详解
某些语句中,可能没有模式;
另一些语句中,可能没有动作及其大括号。
awk检查你的程序以确认不存在语法错误后,一次读取一行输入,并对每一行按序处理模式。
对于每个匹配到当前输入行的模式,执行其关联的动作。
不存在模式,则匹配每个输入行,因此没有模式的每个动作对于每个输入行都要执行。
一个仅包含模式的模式-动作语句将打印匹配该模式的每个输入行。
程序的格式
模式-动作语句以及动作中的语句通常以换行分隔,如果它们以分号分隔,则多个语句可以出现在一行中。分号可以放在任意语句的尾部。
动作的开大括号必须与其对应的模式处于同一行;动作的其余部分,包括闭大括号,则可以出现接下来的行中。
空行会被忽略;一般为了提高程序的可读性会在语句的前面或者后面插入空行。在操作符和操作数的两边插入空格和制表符也是为了提高可读性。
任意行的末尾可能会有注释。注释以符号 # 开始,结束于行尾,就像这样
如上例所示,语句也可以逗号断行,在每个断行的末尾也可以加入注释。
模式
6种模式及其匹配条件。
BEGIN { 语句 } 在读取任何输入前执行一次 语句
END { 语句 } 读取所有输入之后执行一次 语句
表达式 { 语句 } 对于 表达式 为真(即,非零或非空)的行,执行 语句
/正则表达式/ { 语句 } 如果输入行包含字符串与 正则表达式 相匹配,则执行 语句
组合模式 { 语句 } 一个 组合模式 通过与(&&),或(||),非(|),以及括弧来组合多个表达式;对于组合模式为真的每个输入行,执行 语句
模式1,模式2 { 语句 } 范围模式(range pattern)匹配从与 模式1 相匹配的行到与 模式2 相匹配的行(包含该行)之间的所有行,对于这些输入行,执行 语句 。
BEGIN和END不与其他模式组合。范围模式不可以是任何其他模式的一部分。BEGIN和END是仅有的必须搭配动作的模式。
几个例子
最后更新于
这有帮助吗?