撰寫可與使用者相互交談的 AWK 程式

執行AWK程式時, AWK會自動由檔案中讀取資料來進行 處理, 直到檔案結束.只要將AWK讀取資料的來源改成鍵盤輸入, 便可設計與AWK interactive talk 的程式. 本節將提供一個該類程式的範例. [範例 :] 本節將撰寫一個英語生字測驗的程式, 它將印出中文字意, 再由使用者回答其英語生字. 首先編輯一個資料擋 test.dat (內容不拘,格式如下) apple 蘋果 orange 柳橙 banana 香蕉 pear 梨子 starfruit 楊桃 bellfruit 蓮霧 kiwi 奇異果 pineapple 鳳梨 watermelon 西瓜 編輯AWK程式"c2e"如下: awk ' BEGIN { while( getline < ARGV[1] ){ #由指定的檔案中讀取測驗資料 English[++n] = $1 # 最後, n 將表示題目之題數 Chinese[n] = $2 } ARGV[1] = "-" # "-"表示由stdin(鍵盤輸入) srand() # 以系統時間為亂數啟始的種子 question( ) #產生考題 } {# AWK自動讀入由鍵盤上輸入的資料(使用者回答的答案) if($1 != English[ind] ) print "Try again!" else{ print "\nYou are right !! Press Enter to Continue --- " getline question( )#產生考題 } } function question(){

ind = int(rand( )* n) + 1 #以亂數選取考題

system("clear")

print " Press\"ctrl-d\" to exit"

printf("\n%s ", Chinese[ind] " 的英文生字是: ")

} '$* 執行時鍵入如下指令 : $c2e test.dat 螢幕將產生如下的畫面: Press "ctrl-d " to exit 蓮霧 的英文生字是: 若輸入 bellfruit 程式將產生 You are right !! Press Enter to Continue --- } 說 明 :

  1. 參數 test.dat (ARGV[1]) 表示儲存考題的資料檔檔名. AWK 由該檔案上取得考題資料後, 將 ARGV[1] 改成 "-".

    "-" 表示由 stdin(鍵盤輸入) 資料. 鍵盤輸入資料的結束符號 (End of file) 是 Ctrl-d. 當 AWK 讀到 Ctrl-d 時就停止由 stdin 讀取資料.

  2. AWK的數學函數中提供兩個與亂數有關的函數.
  3. rand( ) : 傳回介於 0與1之間的(近似)亂數值. 0