列印檔案中指定的欄位資料並加以計算
AWK 處理資料時, 它會自動從資料檔中一次讀取一筆記錄, 並會
將該資料切分成一個個的欄位; 程式中可使用 $1, $2,... 直接取得
各個欄位的內容. 這個特色讓使用者易於用 AWK 撰寫 reformatter
來改變資料格式.
- [ 範例 :] 以檔案 emp.dat 為例, 計算每人應發工資並列印報表.
- [ 分析 :] AWK 會自行一次讀入一列資料, 故程式中僅需告訴
AWK 如何處理所讀入的資料列.
執行如下命令 : ( $ 表UNIX命令列上的提示符號 )
awk '{ print $2, $3 * $4 }' emp.dat
執行結果如下 :
螢幕出現 :
Jenny 21000
Dan 23650
Max 27170
John 27500
Linda 19950
說 明 :
- UNIX命令列上, 執行AWK的語法為:
awk 'AWK程式' 欲處理的資料檔檔名.
本範例中的 程式部分 為 {print $2, $3 * $4}.
把程式置於命令列時, 程式之前後須以 ' 括住.
- emp.dat 為指定給該程式處理的資料檔檔名.
- 本程式中使用 : Pattern { Actions } 語法.
Pattern | Actions
|
---|
| print $2, $3 * $4
|
---|
Pattern 部分被省略, 表無任何限制條件. 故AWK讀入每筆資料列
後都將無條件執行這個 Actions.
- print為AWK所提供的輸出指令, 會將資料輸出到stdout(螢幕).
print 的參數間彼此以 ``{ ,}'' 隔開, 印出資料時彼此間會以空白
隔開.
(參考 附錄 D 內建變數OFS)
- 將上述的 程式部分 儲存於檔案 pay1.awk 中. 執行命令時再指定AWK程式檔 之檔名. 這是執行AWK的另一種方式, 特別適用於程
式較大的情況, 其語法如下:
$awk -f AWK程式檔名 資料檔檔名
故執行下列兩命令,將產生同樣的結果.
$awk -f pay1.awk emp.dat
$awk ' { print $2, $3 * $4 } ' emp.dat
讀者可使用``-f''參數,讓AWK主程式使用其它僅含 AWK函數 的
檔案中的函數
其語法如下:
awk -f AWK主程式檔名 -f AWK函數檔名 資料檔檔名
(有關 AWK 中函數之宣告與使用於 7.4 中說明)
- AWK中也提供與 C 語言中類似用法的 printf() 函數. 使用
該函數可進一步控制資料的輸出格式.
編輯另一個AWK程式如下, 並取名為 pay2.awk
{ printf("\%6s Work hours: %3d Pay: %5d\", $2,\$3, $3* $4) }
執行下列命令
$awk -f pay2.awk emp.dat
執行結果螢幕出現:
Jenny Work hours: 100 Pay: 21000
Dan Work hours: 110 Pay: 23650
Max Work hours: 130 Pay: 27170
John Work hours: 125 Pay: 27500
Linda Work hours: 95 Pay: 19950