AWK 選印合乎指定條件的記錄

发表于:2007-05-26来源:作者:点击数: 标签:
選印合乎指定條件的記錄 選印合乎指定條件的記錄 Pattern { Action }為AWK中最主要的語法. 若某Pattern之值為真則執行它後方的 Action. AWK中常使用``關係判斷式'' (Relational Expression)來當成 Pattern. AWK中除了, , ==, != ,...等關係運算元( Relationa
選印合乎指定條件的記錄

選印合乎指定條件的記錄

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

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

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

$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 }指令
    Pattern Actions
    ~/^A.*/ { *= 1.05 }
    < 100 { = 100 }
    再從資料檔中讀進下一筆記錄繼續進行處理.
  2. 第一個 Pattern { Action }是: ~ /^A.*/ { *= 1.05 } ~ /^A.*/ 是一個Pattern, 用來判斷該筆資料列的第一欄是否包含%以``A''開頭的子字串. 其中 /^A.*/ 是一個Regular Expression, 用以表示任何以``A''開頭的字串. (有關 Regular Expression 之用法 參考 附錄 E ).

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

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


原文转自:http://www.ltesting.net