如何讀取命令列上的參數

大部分的應用程式都容許使用者於命令之後增加一些選擇性的參數. 執行AWK時這些參數大部分用於指定資料檔檔名, 有時希望在程式 中能從命令列上得到一些其它用途的資料. 本小節中將敘述如何在 AWK程式中取用這些參數. 建立檔案如下, 命名為 see_arg : { awk ' BEGIN { for( i=0; i<ARGC ; i++) print ARGV[i] # 依次印出AWK所紀錄的參數 } '$* 執行如下命令 : $ see_arg first-arg second-arg 結果螢幕出現 : awk first-arg second-arg 說明 :
  1. ARGC, ARGV[ ] 為AWK所提供的內建變數.
    • ARGC : 為一整數. 代表命令列上, 除了選項-v, -f 及其對應 的參數之外所有參數的數目.
    • ARGV[ ] : 為一字串陣列. ARGV[0],ARGV[1],...ARGV[ARGC-1]. 分別代表命令列上相對應的參數.
    例如, 當命令列為 : $awk -vx=36 -f program1 data1 data2

    或 awk '{ print $1 ,$2 }' data1 data2

    其 ARGC 之值為 3 ARGV[0] 之值為 "awk" ARGV[1] 之值為 "data1" ARGV[2] 之值為 "data2" 命令列上的 "-f program1", " -vx=36", 或程式部分 '{ print $1, $2}' 都不會列入 ARGC 及 ARGV[ ] 中.

  2. AWK 利用 ARGC 來判斷應開啟的資料檔個數.
  3. 但使用者可強行改變 ARGC; 當 ARGC 之值被使用者設為 1 時; AWK將被矇騙,誤以為命令列上並無資料檔檔名, 故不會以 ARGV[1], ARGV[2],..為檔名來開檔讀取資料; 但於程式中仍可藉由 ARGV[1], ARGV[2],..來取得命令列上的資料. 某一程式 test1.awk 如下 : BEGIN{ number = ARGC #先用number 記住實際的參數個數. ARGC = 2 # 自行更改 ARGC=2, AWK將以為只有一個 資料檔 # 仍可藉由ARGV[ ]取得命令列上的資料. for( i=2; i< number; i++) data[i] = ARGV[i] } ........ 於命令列上鍵入 $awk -f test1.awk data_file apple orange 執行時 AWK 會開啟資料檔 data_file 以進行處理. 不會開啟以 apple,orange 為檔名的檔案(因為 ARGC 被改成2). 但仍可藉由 ARGV[2], ARGV[3]取得命令列上的參數 apple, orange
  4. 可以下列命令來達成上例的效果. $awk -f test2.awk -v data[2]="apple" -v data[3]="orange" data_file