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不匹配任何的輸入文件,可是執行動做塊中的全部動做,它在整個輸入文件處理完成後被執行
(注:我的理解,有什麼不妥,請多多指教)