在 awk
命令中,动作 { commands }
是一个核心组成部分,用于定义当满足特定条件或模式时所执行的命令序列。基本结构如下:
awk 'pattern { commands }' file(s)
pattern
(可选):是一个条件表达式,可以是正则表达式、数值比较或者其他模式匹配规则。如果省略 pattern,则对每一行输入都会执行{ commands }
中的命令。{ commands }
:这是动作块,其中包含了一系列 awk 语句,这些语句将在每个满足 pattern 的输入行上执行。这里的命令可以包括变量赋值、字符串操作、算术运算、输出控制等。
例如:
awk '/root/ { print $1, $6 }' /etc/passwd
在这个例子中,/root/
是 pattern,表示只对包含 "root" 字符串的行执行动作。动作块 { print $1, $6 }
表示打印当前行的第一个和第六个字段(假设字段由冒号分隔)。
另外,awk
还有 BEGIN 和 END 动作块:
BEGIN { commands }
: 在处理任何输入文件之前执行,通常用于初始化变量或者输出表头等。END { commands }
: 在所有输入文件处理完毕后执行,常用来做总结性计算或输出。
例如:
awk 'BEGIN { FS=":"; OFS="," } { print $1, $6 } END { print "Total lines:", NR }' /etc/passwd
在这个例子中,BEGIN 动作块设置了输入字段分隔符(FS)为冒号,并设置了输出字段分隔符(OFS)为逗号。主体动作块打印每行的第一和第六个字段,而 END 动作块在所有行处理完后打印总行数(NR)。