選印合乎指定條件的記錄

Pattern { Action }為AWK中最主要的語法. 若某Pattern之值為真則 執行它後方的 Action. AWK中常使用``關係判斷式'' (Relational Expression)來當成 Pattern.
AWK中除了>, <, ==, != ,...等關係運算元( Relational Operators )外,另外提供 ~(match),!~(Not Match) 二個關係運算元. 利用這兩個運算元, 可判斷 某字串是否包含能符合所指定 Regular Expression 的子字串. 由於這些特性, 很容易使用AWK來撰寫需要字串比對, 判斷的程式. [ 範例 :] 承上例,
  1. 組裝部門員工調薪5%,(組裝部門員工之ID.係以``A''開頭)
  2. 所有員工最後之薪資率若仍低於100, 則以100計.
  3. 撰寫AWK程式列印新的員工薪資率報表.
[分析 ] : 這個程式須先判斷所讀入的資料列是否合於指定條件, 再進行 某些動作.AWK中 Pattern { Actions } 的語法已涵蓋這種 `` if ( 條件 ) { 動作} ''的架構. 編寫如下之程式, 並取名 adjust1.awk

$1 ~ /^A.*/ { $3 *= 1.05 } $3<100 { $3 = 100 }

{ printf("%s %8s %d\n", $1, $2, $3)} 執行下列命令 :

$awk -f adjust1.awk emp.dat

結果如下 : 螢幕出現 :
A125 Jenny 105
A341 Dan 115
P158 Max 130
P148 John 125
A123 Linda 100
說 明 :

  1. AWK的工作程序是: 從資料檔中每次讀入一筆資料列, 依序執行完程式中所有的 Pattern{ Action }指令
    PatternActions
    $1~/^A.*/{ $3 *= 1.05 }
    $3 < 100{ $3 = 100 }
    {printf("%s%8s%d\n",$1,$2,$3)}
    再從資料檔中讀進下一筆記錄繼續進行處理.
  2. 第一個 Pattern { Action }是: $1 ~ /^A.*/ { $3 *= 1.05 } $1 ~ /^A.*/ 是一個Pattern, 用來判斷該筆資料列的第一欄是否 包含%以``A''開頭的子字串. 其中 /^A.*/ 是一個Regular Expression, 用以表示任何以``A''開頭的字串. (有關 Regular Expression 之用法 參考 附錄 E ).

    Actions 部分為 $3 *= 1.05 $3 *= 1.05 與 $3 = $3 * 1.05 意義相同. 運算子``*='' 之用法則與 C 語言中一樣. 此後與 C 語言中用法相同 的運算子或語法將不予贅述.

  3. 第二個 Pattern { Actions } 是: $3 <100 {$3 = 100 } 若第三欄的資料內容(表薪資率)小於100, 則調整為100.
  4. 第三個 Pattern { Actions } 是: {printf("%s %-8s %d\n",$1, $2, $3 )} 省略了Pattern(無條件執行Actions), 故所有資料列調整後的資料 都將被印出.