a. 語法] awk output 指令 | "shell 接受的命令"( 如 : print $1,$2 | "sort -k 1" )
[b. 語法] "shell 接受的命令" | awk input 指令( 如 : "ls " | getline)
注 :awk input 指令只有 getline 乙個.
awk output 指令有 print, printf() 二個.
在a 語法中, awk所輸出的資料將轉送往 shell , 由 shell 的命令進行處理.以上例而言, print 所輸出的資料將經由 shell 命令 "sort -k 1" 排序後再送往螢幕(stdout).
上例awk程式中, "print$1, $2" 可能反覆執行很多次, 其輸出的結果將先暫存於 pipe 中,等到該程式結束時, 才會一併進行 "sort -k 1".
須注意二點 :
1、不論 print $1, $2 被執行幾次, "sort -k 1" 的執行時間是 "awk程式結束時",
2、"sort -k 1" 的執行次數是 "一次".
在 b 語法中, awk將先呼叫 shell 命令. 其執行結果將通過 pipe 送入awk程式,以上例而言, awk先讓 shell 執行 "ls",shell 執行後將結果存於 pipe, awk指令 getline再從 pipe 中讀取資料.
使用本語法時應留心: 以上例而言,awk "立刻"呼叫 shell 來執行 "ls", 執行次數是一次.
getline 則可能執行多次(若pipe中存在多行資料).
例子:對程序pid進行排序
ps -ef|awk ''
將awk的結果pid值,存到pipe中當程式結束時一次性傳給「sort -n」來進行排序,並輸出到標準輸出,此外可以呼叫close(「sort -n」)來關閉「sort -n」前的pipe並立刻將「sort -n」交給shell執行。
awk 'begin'
說明:awk不一定要處理檔案,begin會在尚未開啟任何輸入檔案前,被執行一次,awk把「|」管道符號前面的字串當成shell上的命令,並將命令送往shell,執行結果則由pipe送進awk程式中,getline為awk的提供的輸入指令
語法由何處讀取資料
資料讀入後置於
getline var < file
所指定的 file
變數 var(var省略時,表示置於$0)
getline var
pipe 變數
變數 var(var省略時,表示置於$0)
當pattern 為 begin 或 end 時, getline 將由 stdin 讀取資料, 否則由awk正處理的資料檔案上讀取資料.
getline 一次讀取一行資料, 若讀取成功則return 1, 若讀取失敗則return -1, 若遇到檔案結束(eof), 則return 0(false)
AWK程式中使用Shell命令
awk程式中允許呼叫shell指令,並提供管道解決awk與系統間資料傳遞的問題。所以awk很容易使用系統資源,讀者可利用這個特點來編寫某些適用的系統工具。範例 寫乙個awk程式來列印出線上人數。將下列程式建檔案,命名為 count.awk begin 並執行下列命令 awk f count.awk ...
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...