awk基础教程

所需积分/C币:10 2014-09-03 23:06:01 620KB PDF

awk基础教程 学习awk入门必备 不难,高手绕道
ASPAO計畫版權鹁明 ASPAC( Academia sinica package)是中央研宪院計算中心關於“軟體工具使 用”( Software tools)及“問題解决”( Problem solving)的計畫。在這計畫下所發展 之軟皚及文件都屬於中央研究院計算中心所有。所有正式公開之電子形式資料(包括軟 醴及文件),在滿足下列軟髏及文件使用權利說明下,都可免費取得及自由使用 軟體及文件使用權利說明如下 1.軟髏的使用權利 將沿用美國FSF( Free software foundation)1991年6月第二版的 GNU General Public license 2.文件的使用權利: 文件可以自由拷貝及引用,但不得籍以圖利。除非必要手續費的收取。 囚一般的 Poor Ma下F中無法使用中文當成章節名稱, 所以本文中暫以英文來表示章飾名稱 Contents 1 Preface 2 Overview of awk 2.⊥ WhV AWK 2.2 How to get AWK 2.3 How AWK works 233349 3 How to Compute and Print Certain Fields 4 Selection by Text Content and by Comparsion 11 5 Arrays in AWK 13 6 Making Shell Command in an AWK Program 7 A Pratical Example 19 7.1 Redirecting output to files 7. 2 Using System resources 2 7.3 Execute AWK Programs 26 7.4 Changing Field Separator User Define Functions DO 7.5 Using getline to Input F 3:3 8 Multi-line record 36 9 Getting Arguments on Command Line 39 10 Writing Interactive Program in AWK 41 11 Recursive Program 44 Appendix a patterns Appendix b actions 52 Appendix c built-in Functions 60 Appendix d Built-in Variables 64 Appendix e regular expression 67 1 Preface 有關本手卌 這是一本AW學習指引,其重點替重於 AWK適於解决哪些問題? AWK常見的解題模式為何? 為使讀者快速掌握AWK解題的模式及特性,本手卌像由一些較具代表性的範例及其 題解所構成;各範例由淺入滦,彼此間相互連貫,範例中並對所使用的AW語法及 指令輔以必要的說明.有闊AWK的指令,函數…等條列式的說明則收錄於附錄屮 以利讀者往後撰寫程式時査悶.如此編排,可讓讀者在短時間內順暢地學會使用 AWK來解決問題.建議讀者循替範例上機竇習,以加滐學習效果 讀者宜先具備下列背景: a.UNIX環境下的簡單操作及基本概念 例如:檔案編輯,檔案複製及pipe,I/ O Redirection等概念 .C語言的基本話法及流程控制指今.1 例如: printf(, while()… ●參考書目 本手冊是以學習指引為主要綸排方式,讀者荇需要有關AW介紹詳盡的参考書,可 珍考下列兩本書 Alfred v. Aho. Brian w. Kernighan and peter. Weinberger, "The AWK Programming Language", Addison-Wesley publishing com- pany Dale dougherty, sed 6 aw, o reilly associates, Inc 1AwK指令並不多,且其中之大部分與(語言中之用法一致,本手冊中對該類指令之語法 及特性不再加以錾冗的說明,讀者若欲滐究,可自行翻閱相蘭的¢語言書籍 2Oⅴ erview of awk 2. 1 Why AwK AWK是一種程式語言.它具有一般程式語言常旯的功能.因AWK語言具有某些 特點.如:使用直譯器( Interpreter)不需先行編譯;燹數無型別之分( Typeless),可使用 文字當陣列的註標( Associative Array)…等特色.因此,使用AW撰寫程式比赶使用 其它語言更簡潔便利且節省時問.AWK還具有一些内建功能,使得AWK擅於處理具資 料列( Record),欄位( Field型態的蚤料;此外,AWK内建有pipe的功能,可將處理中的 資料傳送給外部的Shel命令加以處理.再將 Shelle命令處理後的資料傳回AWK程式,這 個特點也使得AWK程式很容易使用糸統資源 由於AWK具有上述特色,在問題處理的過程,可輕易使用AWK來撰寫一些小工具 這些小工具並非用來解决整個大問題,它們只個別扮演解泱問題過程的某些角色,可藉由 Shel所提供的pipe將資料按需要傳送給不同的小工具進行處理,以解决整個大問題.這 種解題方式,使得這些小工具可因不同需求而被重覆組合及使用(ree);也可藉此方式來 先行測試人程式原型的可行性與正確性,將來荇需要較高的執行速度時再用(語言來改寫 這是AW最常被應用之處.若能常常如此處理間題,讀者可以以更高的角度來思考抽家 的問題,而不會被拘泥於細飴的部份.本手冊為AW入門的學習指引,其内容將先強調如 何撰寫AWK程式,未列入進一步解題方式的應用實例,這部分將留待UNIX進階手册中 再行討論 2.2 How to get awK 般的UNIX作業糸統,本身即附有AW.不同的UNX作業糸統所附的AW其版本亦 不盡相同.若讀者所使用的糸統上未附有AW,可透過 anonymous itp到下列地方取 phi. sinica. edu. tw: /pub/gnu ftp. edu. tw: /UNTX/gnll prep ai Init. edu: /pub/glu 2.3 How AWK works 為使於解釋AWK程式架構,及有關術語( erminology,先以一個員工薪資檔(emp.dat ),來加以介紹 a125 Jenny 100 21 A3411an110215 P158Max130209 P148John125220 A123inda95210 檔案中各欄位依次為員工邛,姓名,蕲資率,及實際工時I中的第一碼 為部門識別碼.“A”,”P”分別表示“組裝”及“包裝”部門 本小飾瞽重於說明AWK程式的主要架構及工作原理,並對一些重要的名詞輔以必要的解 釋.由這部分内容,讀者可體會出AWK語言的主要精神及AWK舆其它語程式言的差異 處.為便於說明,以列方式說明於後 名詞定義 1.資料列( Rccord):AWK從資料檔上讀取資料的基本單位. 以上列檔案emp.dat為例,AWK讀入的 第一筆資料列是"A125 Jenny100210 第二筆資料列是"A341Dan110215 一般而言,一筆資料列相當於資料檔上的一行資料 (考:附錄B内建孌數“RS” 2.欄位( field:為資料列上彼分隔開的子字串 以資料列“A125 Jenny100210”為例 匚第一欄第二欄第三欄」第四糊」 “A125”“ Jenny'100210 般是以空白字元來分隔相鄰的欄位.(參考:附錄D内建變数“FS” 如何執行AK 於UNX的命令列上鍵入諸如下列格式的指令:(“$”表Shel命令列上的提示符號) $awk'AWK程式’資料檔檔名 則AWK會先漏譯該程式,然後執行該程式來處理所指定的資料檔 上列方式像直接把程式意在UNIX的命令列上) ●AWK程式的主要結構 AWK程式中主要語法是 Pattern{ Actions},故常見之AWK程式其型態如 下 Pattern1 Actions1 j Pattern2 ActiOns Pattern 3 Actions3 ● Pattern是什麼? AWK可接受許多不同型態的 Pattern.一般常使用關像判斷式”( Relation expressIon)來當成 Pattern 例如 x>34是一個 Pattern,判斷箩数x與34是否存在大於的閤像 X==y是個 Pattern,判斷變數x與變數y是否存在等於的關係 上式中ⅹ>34, 便是典型的 Pattern AW提供C語言中常見的關佟運算元( Relational operators)如>,<, >=,<=,==,!= 此外,AWK還提供( match)及!( not match)二個開係運算元(註一).其 用法與涵義如下 若A表一字串,B表 Regular Expression AB判断字串A中是否包含能合於( match)式樣的子字串 A!B判斷字串A中是否未包含能合於( match)B式樣的子字串 例如 banana/an/整個是一個 Pattern 因為“ anana”中含有可 match/an/的子字串,故此傺式 成立(tr 整個 Pattern的值七是te 相關細節請参考附錄 A Patterns,附錄 e Regular Expression 註一:有少數AW代論礬,把 當成另一類的 Operato,並不視為一種Rela Lional Operator.本手册中將這兩個運算元當成一種 Relational opera tor Actions是什麼? Actions是由許多AWK指令構成.而AWK的指令與C語言中的指令十分類似. 例如: WK的1/O指令: print, printf(), getline AWk的流程控制指令:i(..)1else{ whi (請参考附錄B—“Ao ctions ·AWK如何處理 Pattern{ Actions}? AWK會先判斷( Evaluate)該 Pattern之值,若 Pattern判斷( Evaluate)後 之值為trc(或不為0的數字或不是空的字串),則AW將執行該 Pattern所對 應的Acti 反之,若 Pattern之值不為true,則AW將不執行該 Pattern所對應的c ons 例如:若AWK程式中有下列兩指令 5)0>23 i print "Hello! The word banana"/123/i print."Good g WI會先判斷50>23是否成立.因為該式成立,所以AW將印出 Hell! The word!:而另一 Pattern為"” banana”/123/,因為 banana”内未含有任何子字丰可 match/123/,該 Pattern之值為 fale,故AWK將不會印出” Good morning! AWK如何處理{ Actions}的語法?(缺少 Pattern部分 有時語法 Pattern{ Actions}中, Pattern部分被省略,只剩{ Actions 這種情形表示“無條件執行這個 Actions AWK的欄位變數

...展开详情
img

关注 私信 TA的资源

上传资源赚积分,得勋章
最新资源