awk中的END和BEGIN字段的执行顺序server
BEGIN模块后紧跟着动做块,这个动做块在awk处理任何输入文件以前执行awk
中间模块为动做模块文件读取
END模块后紧跟着动做块,这个动做块在awk处理任何输入文件以后执行文件
for exampleco
[root@server1 conf]# awk 'BEGIN{print n}' httpd.conf n=1
[root@server1 conf]#
httpd
输出结果为空,由于BEGIN在全部执行语句以前,因此后边的没法读取
[root@server1 conf]# awk '{print n}' n=1 httpd.conf | head
1
1
1
1
1
1
1
1
1
1
[root@server1 conf]#
在中间的时候读取后边的文件输入,可是前面的n=1不是一个文件,因此日后继续,直到读取一个文件(httpd.conf),那么前面的n=1就认为为复制语句,因此会输出n的值
[root@server1 conf]# awk 'END {print n}' n=1 httpd.conf
1
[root@server1 conf]#
END模块是在最后执行,由于在中间模块已经将文件读取完了,已经给n复制为1,因此END模块输出1
END不匹配任何的输入文件,可是执行动做块中的全部动做,它在整个输入文件处理完成后被执行
(注:我的理解,有什么不妥,请多多指教)