第12章 正规表示法及文件格式化处理.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 正規表示法與 文件格式化處理 2011/11/22 6、好用的資料處理工具: awk 相較於 sed 常常作用於一整個行的處理, awk 則比較傾向於一行當中分成數個『欄位』來處理,預設的『欄位的分隔符號為 “空白鍵” 或 “[tab]鍵 』。其運作模式為 awk 後面接兩個單引號並加上大括號 {} 來設定想要對資料進行的處理動作: 只想要取出帳號與登入者的 IP ,且帳號與 IP 之間以 [tab] 隔開 由前面的例子知道,對 awk 來說,每一行的每個欄位是有變數名稱的,依次分別為 $1, $2, $3…,而 $0 則代表『一整行資料』。 而剛才這個例子 awk 的處理流程為: 1) 讀入第一行,並將第一行的資料填入 $0, $1, $2.... 等變數當中 2) 依據 條件類型 的限制,判斷是否需要進行後面的 動作 3) 做完所有的動作與條件類型 4) 若還有後續的『行』的資料,則重複上面 1~3 的步驟,直到所有的資料都讀完為止 另外,awk 通过下面这些内建变量知道要处理的资料有几行、几栏: 目前的分隔字元,預設是空白鍵 FS 目前 awk 所處理的是『第幾行』資料 NR 每一行 ($0) 擁有的欄位總數 NF 代表意義 變數名稱 列出每一行的帳號 (即 $1) 列出目前處理的行數 (即 awk 內的 NR 變數) 並說明該行有多少欄位 (即 awk 內的 NF 變數) 發現第1行沒有正確的顯示出來。 這是因為我們讀入第1行的時候,變數 $1, $2... 預設還是以空白鍵為分隔的,所以雖然定義了 FS=: 了, 但是卻僅能在第2行後才開始生效 加上 BEGIN 關鍵字就能修正上述的問題 不等於 != 大於或等於 = 等於 == 小於 小於或等於 = 大於 代表意義 運算單元 代表意義 運算單元 awk 的邏輯運算字元: 查閱第3欄小於 10 以下的數據,並僅列出帳號與第3欄 假設有個薪資資料表檔名為 pay.txt: 如果想要計算資料中每人的薪資總額,并格式化輸出,可以這樣做: 因為第1行只是說明,不需進行加總 (NR==1) 從第2行開始進行加總 (NR2) 關於 awk 的指令間隔: 所有 awk 的動作,亦即在 {} 內的動作,如果有需要多個指令輔助,可利用分號『;』間隔, 或者直接以 [Enter] 按鍵來隔開每個指令,例如上面的範例中,鳥哥共按了3次 [enter] 喔。 awk 的動作 {} 還支援 if (條件) 這個例子也等同與上面的效果 * * 1、什麽是正規表示法 (Regular Expression, RE) 簡單的說,正規表示法就是處理字串的方法,它透過一些特殊符號的輔助,可以讓使用者輕易的達到『搜尋/刪除/取代』某特定字串的功能。 正規表示法基本上是一種『表示法』, 只要工具程式支援這種表示法,該工具程式就可以用來作為正規表示法的字串處理之用。 例如 vi, grep, awk ,sed 等工具,因為它們支援正規表示法, 所以就可以使用正規表示法的特殊字元來進行字串的處理。但例如 cp, ls 等指令並未支援正規表示法, 就只能使用 bash 自己本身的萬用字元而已。 注意: 『正規表示法與萬用字元是完全不一樣的東西!』 這很重要喔!因為『萬用字元 (wildcard) 代表的是 bash 操作介面的一個功能』,但正規表示法則是一種字串處理的表示方式! 2、基礎正規表示法 2.1 文字編碼系統 由計算機概論知識知道,計算機只會認識 0 和 1,所以記錄的資料 (包含文字) 也只有 0 與 1 而已,所以檔案的內容要被取出來查閱時,必須要經過一個編碼系統的轉換處理。而所謂的『編碼系統』就是一個類似于下面這個樣子的『字碼對照表 (編碼表)』: 當要寫入檔案的文字資料時,該文字資料會由編碼對照表將該文字轉成數字後,再存入檔案當中。同樣的,當需要將檔案內容的資料讀出時,也會經過編碼對照表將該數字轉成對應的文字後,再顯示到螢幕上。 這也就是為何瀏覽器上面如果編碼寫錯時,會出現亂碼的原因 -- 這是因為編碼對照表寫錯, 導致對照的文字產生誤差之故。 常用的英文編碼表為 ASCII 系統,這個編碼系統中的每個符號 (英文、數字或符號等) 都會佔用 1bytes 的記錄;中文字當中的編碼系統目前最常用的就是 big5 這個編碼表了,每個中文字會佔用 2bytes。 big5碼的中文字編碼對於某些資料庫系統來說是很有問題的,最後由國際組織 ISO/IEC 跳出來制訂了所謂的 Unicode 編碼系統 (UTF8或萬國碼),這個編碼系統統一了所有國家的不同編碼。 2.2 語系對正規表示法的影響 由於不同語系的編碼資料並不相同,所以會造成資料擷取結果的差異。 舉例來說,在

文档评论(0)

0520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档