工作流程
可以参考man手册。
man --pager='less -p ^"AWK PROGRAM EXECUTION"' awk
示例
awk -v a=1 -v b=2 'BEGIN{...}{...main...}END{...}' x=3 a.txt y=4 b.txt z=5
- 解析CLI中-v选项的变量赋值。
- 将awk代码(包含-v选项的变量赋值)编译成awk可以识别的内部格式。
- 执行BEGIN代码块。
- 根据RS读取文件(根据ARGV数组元素决定待读取的文件)并划分记录。如果没有待读取的文件则从STDIN中读取。每读取一条记录就执行一次main代码块。
-
- 若待读取的文件(即位于非选项型参数位置)的文件名格式为var=val,那么将其识别为变量赋值。由于awk工作流程的执行顺序,因此该变量不存在于BEGIN代码块中,也不存在于出现在此变量之前的文件。例如在执行a.txt时,其main代码块中无法识别变量y和变量z。所有此处的变量在END代码块中均有效。
- 每读取一条记录:
- 就设置一次NR、FNR、RT和$0等变量;
- 根据PROCINFO["FS"]划分字段,设置位置参数/变量$1、$2至$NF;
- 执行main代码块:pattern通过则执行action,否则不执行。
- 执行END代码块。