AWK 程式中使用 Shell 命令
发表于:2007-05-26来源:作者:点击数:
标签:
AWK 程式中使用 Shell 命令 BEGIN {while ( who | getline ) n++ print n} AWK 程式中使用 Shell 命令 AWK程式中允許呼叫Shell指令. 並提供pipe解決AWK與系統間資料傳遞的問題. 所以AWK很容易使用系統資源. 讀者可利用這個特色來撰寫某些適用的系統工具. 範
AWK 程式中使用 Shell 命令
BEGIN
{while ( "who" | getline ) n++ print n}AWK 程式中使用 Shell 命令
AWK程式中允許呼叫Shell指令. 並提供pipe解決AWK與系統間
資料傳遞的問題. 所以AWK很容易使用系統資源. 讀者可利用這個
特色來撰寫某些適用的系統工具.
範例 : 寫一AWK程式來列印出線上人數.
將下列程式建檔, 命名為 count.awk
BEGIN {
while ( "who" | getline ) n++
print n
}
並執行下列命令 :
awk { -f} count.awk
執行結果將會印出目前線上人數
說 明 :
- AWK 程式並不一定要處理資料檔. 以本例而言, 僅輸入程式
檔count.awk, 未輸入任何資料檔.
- BEGIN 和 END 同為AWK中之種一 Pattern. 以 BEGIN 為
Pattern之Actions,只有在AWK開始執行程式,尚未開啟任何輸入
檔前, 被執行一次.(注意: 只被執行一次 )
- ``{ |}'' 為 AWK 中表示 pipe的符號. AWK 把 pipe之前的字串
''who''當成Shell上的命令, 並將該命令送往Shell執行, 執行的結果
(原先應於螢幕印出者)則藉由pipe送進AWK程式中.
- getline為AWK所提供的輸入指令.
其語法如下 :
語法 | 由何處讀取資料 | 資料讀入後置於 |
---|
getline var < file | 所指定的 file | 變數 var(var省略時,表示置於) |
---|
getline var | pipe | 變數 var(var省略時,表示置於) |
---|
getline var | 見 註一 | 變數 var(var省略時,表示置於) |
---|
註一 : 當 Pattern 為 BEGIN 或 END 時, getline 將由 stdin 讀取資料,
否則由AWK正處理的資料檔上讀取資料.
getline 一次讀取一行資料,
若讀取成功則return 1,
若讀取失敗則return -1,
若遇到檔案結束(EOF), 則return 0;
本程式使用 getline 所 return 的資料 來做為 while 判斷
迴圈停止的條件,某些AWK版本較舊,並不容許使用者改變 之值.
這種版的 AWK 執行本程式時會產生 Error, 讀者可於 getline 之後
置上一個變數 (如此, getline 讀進來的資料便不會被置於 ),
或直接改用gawk便可解決.
原文转自:http://www.ltesting.net