AWK How to Compute and Print Certain Fields
时间:2005-07-10 来源:sunyone
列印檔案中指定的欄位資料並加以計算
列印檔案中指定的欄位資料並加以計算
AWK 處理資料時, 它會自動從資料檔中一次讀取一筆記錄, 並會 將該資料切分成一個個的欄位; 程式中可使用 $1, $2,... 直接取得 各個欄位的內容. 這個特色讓使用者易於用 AWK 撰寫 reformatter 來改變資料格式.
- [ 範例 :] 以檔案 emp.dat 為例, 計算每人應發工資並列印報表.
- [ 分析 :] AWK 會自行一次讀入一列資料, 故程式中僅需告訴 AWK 如何處理所讀入的資料列.
- UNIX命令列上, 執行AWK的語法為: awk 'AWK程式' 欲處理的資料檔檔名. 本範例中的 程式部分 為 {print $2, $3 * $4}. 把程式置於命令列時, 程式之前後須以 ' 括住.
- emp.dat 為指定給該程式處理的資料檔檔名.
- 本程式中使用 : Pattern { Actions } 語法. PatternActions 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
相关阅读 更多 +