將資料直接輸出到檔案

AWK中並未提供如 C 語言中之fopen() 指令, 也未有fprintf() 檔案輸出之指令. 但AWK中任何輸出函數之後皆可藉由使用與 UNIX 中類似的 I/O Redirection , 將輸出的資料 Redirect 到指定 的檔案; 其符號仍為 > (輸出到一個新產生的檔案) 或 >> ( append 輸出的資料到檔案末端 ). [例 :]於到班資料檔 arr.dat 之前端增加一列抬頭如下 : "ID Number Arrival Time", 並產生報表輸出到檔案 today_rpt1中 建立如下檔案並取名為reformat1.awk BEGIN { print `` ID Number Arrival Time'' > ``today_rpt1'' print ``==========================='' > ``today_rpt1'' } { printf(" %s %s\n", $1,$2 ) > "today_rpt1" } 執行: $awk -f reformat1.awk arr.dat 執行後將產生檔案 today\_rpt1, 其內容如下 : ID Number Arrival Time ============================ 1034 7:26 1025 7:27 1101 7:32 1006 7:45 1012 7:46 1028 7:49 1051 7:51 1029 7:57 1042 7:59 1008 8:01 1052 8:05 1005 8:12 說 明 :
  1. AWK程式中, 檔案名稱 today_rpt1 之前後須以" 括住, 表示 today_rpt1 為一字串常數. 若未以"括住, 則 today_rpt1 將 被AWK解釋為一個變數名稱.

    在AWK中任何變數使用之前, 並不須事先宣告. 其初始值為空字串 (Null string) 或 0.因此程式中若未以 " 將 today_rpt1 括住, 則 today_rpt1 將是一變數, 其值將是空字串, 這會於執行時 造成錯誤(Unix 無法幫您開啟一個以Null String為檔名的檔案). * 因此在編輯 AWK程式時, 須格外留心. 因為若敲錯變數名稱, AWK在編譯程式時會認為是一新的變數, 並不會察覺. 如此 往往會造成 RuntimeError.

  2. BEGIN 為AWK的保留字, 是 Pattern 的一種. 以 BEGIN 為 Pattern 的 Actions 於AWK程式剛被執行尚未讀取 資料時被執行一次, 此後便不再被執行.
  3. 讀者或許覺得本程式中的I/O Redirection符號應使用 `` >>'' (append)而非 `` >''. \index{ { >} } \index{ { >>} } [*] 本程式中若使用 ``>'' 將資料重導到 today_rpt1, AWK 第一次執行該指令時會產生一個新檔 today_rpt1, 其後再 執行該指令時則把資料append到today_rpt1檔末, 並非每執行 一次就重開一個新檔. [*] 若採用">>"其差異僅在第一次執行該指令時, 若已存在 today_rpt1則 AWK 將直接把資料append在原檔案之末尾. [*] 這一點, 與UNIX中的用法不同.