Linux的那些事兒(11)—-awk的使用

來源:互聯網
上載者:User

Awk釋義

英文原義:Aho、Weinberger、Kernighan

中文釋義:三位創造者Aho、Weinberger和Kernighan統稱

Awk簡介

AWK是一種優良的文本處理工具。它不僅是 Linux 中也是任何環境中現有的功能最強大的資料處理引擎之一。這種編程及資料操作語言(其名稱得自於它的創始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首個字母)的最大功能取決於一個人所擁有的知識。 AWK 提供了極其強大的功能:可以進行樣式裝入、流量控制、數學運算子、進程式控制制語句甚至於內建的變數和函數。它具備了一個完整的語言所應具有的幾乎所有精美特性。實際上 AWK 的確擁有自己的語言: AWK 程式設計語言, 三位建立者已將它正式定義為“樣式掃描和處理語言”。它允許您建立簡短的程式,這些程式讀取輸入檔案、為資料排序、處理資料、對輸入執行計算以及產生報表,還有無數其他的功能。

最簡單地說, AWK 是一種用於處理文本的程式設計語言工具。AWK 在很多方面類似於 shell 程式設計語言,儘管 AWK 具有完全屬於其本身的文法。它的設計思想來源於 SNOBOL4 、sed 、Marc Rochkind設計的有效性語言、語言工具 yacc 和 lex ,當然還從 C 語言中擷取了一些優秀的思想。在最初創造 AWK 時,其目的是用於文本處理,並且這種語言的基礎是,只要在輸入資料中有模式比對,就執行一系列指令。該工具 + 生產力掃描檔案中的每一行,尋找與命令列中所給定內容相匹配的模式。如果發現匹配內容,則進行下一個編程步驟。如果找不到匹配內容,則繼續處理下一行。

儘管操作可能會很複雜,但命令的文法始終是:

awk '{pattern + action}'

其中 pattern 表示 AWK 在資料中尋找的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括弧 ({}) 不需要在程式中始終出現,但它們用於根據特定的模式對一系列指令進行分組。

gawk 是 AWK 的 GNU 版本。

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

注 解:一種程式設計語言,因其模式比對文法而特別有用,通常用於資料檢索和資料轉換。一個GNU版本稱為Gawk。

Awk的調用方式

awk提供了適應多種需要的不同解決方案,它們是:

  一、 awk命令列,你可以象使用普通UNIX命令一樣使用awk,在命令列中你也可以使用awk程式設計語言,雖然awk支援多行的錄入,但是錄入長長的命令列並保證其正確無誤卻是一件令人頭疼的事,因此,這種方法一般只用於解決簡單的問題。當然,你也可以在shell script程式中引用awk命令列甚至awk程式指令碼。

  二、使用-f選項調用awk程式。awk允許將一段awk程式寫入一個文字檔,然後在awk命令列中用-f選項調用並執行這段程式。具體的方法我們將在後面的awk文法中講到。

  三、利用命令直譯器調用awk程式:利用UNIX支援的命令直譯器功能,我們可以將一段awk程式寫入文字檔,然後在它的第一行加上:

  #!/bin/awk -f

  並賦予這個文字檔以執行的許可權。這樣做之後,你就可以在命令列中用類似於下面這樣的方式調用並執行這段awk程式了。

  awk指令碼文本名 待處理檔案

Awk的文法

與其它UNIX命令一樣,awk擁有自己的文法:

  awk [ -F re] [parameter...] ['prog'] [-f progfile]

  參數說明:

  -F re:允許awk更改其欄位分隔符號。

  parameter: 該參數協助為不同的變數賦值。

  'prog': awk的程式語句段。這個語句段必須用單拓號:'和'括起,以防被shell解釋。這個程式語句段的標準形式為:

  'pattern '

  其中pattern參數可以是egrepRegex中的任何一個,它可以使用文法/re/再加上一些樣式匹配技巧構成。與sed類似,你也可以使用"," 分開兩樣式以選擇某個範圍。關於匹配的細節,你可以參考附錄,如果仍不懂的話,找本UNIX書學學grep和sed(本人是在學習ed時掌握匹配技術的)。 action參數總是被大括弧包圍,它由一系統awk語句組成,各語句之間用";"分隔。awk解釋它們,並在pattern給定的樣式匹配的記錄上執行其操作。與shell類似,你也可以使用“#”作為注釋符,它使“#”到行尾的內容成為注釋,在解釋執行時,它們將被忽略。你可以省略pattern和 action之一,但不能兩者同時省略,當省略pattern時沒有樣式匹配,表示對所有行(記錄)均執行操作,省略action時執行預設的操作——在標準輸出上顯示。

  -f progfile:允許awk調用並執行progfile指定有程式檔案。progfile是一個文字檔,他必須符合awk的文法。

  in_file:awk的輸入檔案,awk允許對多個輸入檔案進行處理。值得注意的是awk不修改輸入檔案。如果未指定輸入檔案,awk將接受標準輸入,並將結果顯示在標準輸出上。awk支援輸入輸出重新導向。

參考資料

1、BaiDu AWK:http://baike.baidu.com/view/209681.htm

2、AWK手冊:http://linuxfire.com.cn/~lily/awk.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.