awk程式中允許呼叫shell指令,並提供管道解決awk與系統間資料傳遞的問題。所以awk很容易使用系統資源,讀者可利用這個特點來編寫某些適用的系統工具。
範例:寫乙個awk程式來列印出線上人數。
將下列程式建檔案,命名為 count.awk
begin
並執行下列命令:
$ awk -f count.awk
說 明:
1. awk 程式並不一定要處理資料檔案,以本例而言,僅輸入程式檔案count.awk,未輸入任何資料檔案。
2. begin 和 end 同為awk中的一種 pattern。以 begin 為 pattern的actions,只有在awk開始執行程式、尚未開啟任何輸入檔案前, 被執行一次。(注意:只被執行一次)
3. "|" 為 awk 中表示管道的符號。awk 把 管道 之前的字串"who"當成shell上的命令,並將該命令送往shell執行,執行的結果(原先應列印在螢幕上的)則通過pipe送進awk程式中。
4. getline為awk所提供的輸入指令。
其語法如下:
語法由何處讀取資料
資料讀入後置於
getline var < file
所指定的 file
變數 var(var省略時,表示置於$0)
| getline var
pipe
變數 var(var省略時,表示置於$0)
getline var
見 註一
變數 var(var省略時,表示置於$0)
註一:當 pattern 為 begin 或 end 時,getline 將由 stdin 讀取資料,否則由awk正處理的資料檔案上讀取資料。
getline一次讀取一行資料,若讀取成功則return 1;
若讀取失敗則return -1;
若遇到檔案結束(eof),則return 0。
本程式使用 getline 所 return 的資料來做為 while 判斷迴圈停止的條件,某些awk版本較舊,並不容許使用者改變 $0 的值。這種版的 awk 執行本程式時會產生 error,讀者可於 getline 之後置上乙個變數 (如此,getline 讀進來的資料便不會被置於 $0 ),或直接改用gawk便可解決。
awk 程式中使用 Shell 命令
a.語法 awk output 指令 shell 接受的命令 如 print 1,2 sort k 1 b.語法 shell 接受的命令 awk input 指令 如 ls getline 注 awk input 指令只有 getline 乙個.awk output 指令有 print,printf...
awk中使用shell變數
其實在awk裡,是不能直接使用shell變數的 方法是 awk v 選項讓awk 裡使用shell變數 time 60 awk v time time begin 這樣要注意 在awk裡,time不能加 符號。網上說如下方法都可行 一 var 這種寫法大家無需改變用 括起awk程式的習慣,是老外常用...
awk中使用shell變數
1 通過命令列引數定義變數時引用 awk v awk變數名 shell變數名 bin bash var4bash test awk v var4awk var4bash begin 2 在awk中直接引用,使用 var 注意使用前格式必須是先用單引號括住再用雙引號括住 bin bash var te...