Chinaunix首页 | 论坛 | 博客
  • 博客访问: 375206
  • 博文数量: 80
  • 博客积分: 6032
  • 博客等级: 准将
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-05 20:07
文章分类

全部博文(80)

文章存档

2007年(1)

2006年(22)

2005年(57)

我的朋友

分类:

2005-07-10 19:27:23

1
2

Overview of AWK

AWK 是一種程式語言. 它具有一般程式語言常見的功能. 因AWK語言具有某些特點, 如 : 使用直譯器(Interpreter)不需先行 編譯; 變數無型別之分(Typeless), 可使用文字當陣列的註標 (Associative Array)...等特色. 因此, 使用AWK撰寫程式比起 使用其它語言更簡潔便利且節省時間. AWK還具有一些內建 功能, 使得AWK擅於處理具資料列(Record), 欄位(Field)型 態的資料; 此外, AWK內建有pipe的功能, 可將處理中的資料 傳送給外部的 Shell命令加以處理, 再將Shell命令處理後的 資料傳回AWK程式, 這個特點也使得AWK程式很容易使用 系統資源.
由於AWK具有上述特色, 在問題處理的過程, 可輕易使用 AWK來撰寫一些小工具; 這些小工具並非用來解決整個大問題, 它們只個別扮演解決問題過程的某些角色, 可藉由Shell所提供的 pipe將資料按需要傳送給不同的小工具進行處理, 以解決整個 大問題. 這種解題方式, 使得這些小工具可因不同需求而被重覆 組合及使用(reuse); 也可藉此方式來先行測試大程式原型的可行性 與正確性, 將來若需要較高的執行速度時再用C語言來改寫. 這是AWK最常被應用之處. 若能常常如此處理問題, 讀者可以 以更高的角度來思考抽象的問題, 而不會被拘泥於細節的部份. 本手冊為AWK入門的學習指引, 其內容將先強調如何撰寫AWK程式, 未列入進一步解題方式的應用實例, 這部分將留待UNIX進階手冊中 再行討論.

一般的UNIX作業系統, 本身即附有AWK. 不同的UNIX作業系統 所附的AWK其版本亦不盡相同. 若讀者所使用的系統上未附有AWK, 可透過 anonymous ftp 到下列地方取得 : phi.sinica.edu.tw:/pub/gnu ftp.edu.tw:/UNIX/gnu prep.ai.mit.edu:/pub/gnu

為便於解釋AWK程式架構, 及有關術語(terminology), 先以一個 員工薪資檔(emp.dat ), 來加以介紹. A125 & Jenny &100 &210 A341 & Dan &110 &215 P158 & Max &130 &209 P148 & John &125 &220 A123 & Linda & 95 &210
檔案中各欄位依次為 員工ID, 姓名, 薪資率,及 實際工時. ID 中的第一碼為部門識別碼. ``A'',''P''分別表示``組裝''及``包裝''部門. 本小節著重於說明AWK程式的主要架構及工作原理, 並對一些重要 的名詞輔以必要的解 釋. 由這部分內容, 讀者可體會出AWK語言 的主要精神及AWK與其它語程式言的差異處. 為便於說明, 以條列 方式說明於後.
  • 名詞定義
    1. 資料列: AWK從資料檔上讀取資料的基本單位.以上列檔案 emp.dat為例, AWK讀入的 第一筆資料列是 "A125 Jenny 100 210" 第二筆資料列是 "A341 Dan 110 215" 一般而言, 一筆資料列相當於資料檔上的一行資料. (參考 : 附錄 B 內建變數``RS'' )
    2. 欄位(Field) : 為資料列上被分隔開的子字串. 以資料列``A125 Jenny 100 210''為例,
      第一欄第二欄 第三欄第四欄
      ``A125'' ``Jenny'' 100 210
      一般是以空白字元來分隔相鄰的欄位. ( 參考 : 附錄 D 內建 變數``FS'' )
  • 如何執行AWK 於UNIX的命令列上鍵入諸如下列格式的指令: ( ``$''表Shell命令 列上的提示符號) $awk 'AWK程式' 資料檔檔名 則AWK會先編譯該程式, 然後執行該程式來處理所指定的資料檔. (上列方式係直接把程式寫在UNIX的命令列上)
  • AWK程式的主要結構 : AWK程式中主要語法是 Pattern { Actions}, 故常見之AWK 程式其型態如下 : Pattern1 { Actions1 } Pattern2 { Actions2 } ...... Pattern3 { Actions3 }
  • Pattern 是什麼 ? AWK 可接受許多不同型態的 Pattern. 一般常使用 ``關係判斷式' (Relational expres sion) 來當成 Pattern. 例如 : x > 34 是一個Pattern, 判斷變數 x 與 34 是否存在 大於 的關係. x == y 是一個Pattern, 判斷變數 x 與變數 y 是否存在等於的關係. 上式中 x >34 , x == y 便是典型的Pattern. AWK 提供 C 語言中常見的關係咚阍

阅读(654) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~