1. 程式人生 > >shell學習之awk或gawk

shell學習之awk或gawk

AWK 是該程式語言本身的名稱,它編寫於 1977 年。其名稱是三個主要作者的姓的首字母縮寫:Drs. A. Aho、P. Weinberger 和 B. Kernighan。

因為 AWK 是一種文字處理和模式匹配語言,所以它通常稱為資料驅動的語言,程式語句描述需要進行匹配和處理的輸入資料,而不是程式操作步驟的序列,在許多語言中都是這樣的。AWK 程式在其輸入資料中搜索包含模式的記錄、對該記錄執行指定的操作,直到程式到達輸入的末尾。

AWK 語言是一種 UNIX 備用工具,它是一種功能強大的文字操作和模式匹配語言,特別適用於進行資訊檢索,這使得它非常適合用於當今的資料庫驅動的應用程式。

雖然基本在linux的發行版中都沒有預設安裝gawk程式,但是我用的騰訊雲的機器上是已經安裝了,騰訊雲預設安裝了很多軟體。

我還是比較喜歡用ubuntu的,可以使用apt-get install 安裝,在mac中可以用 brew install,或者你可以下載了編譯安裝!

gawk程式讓流編輯邁上了一個新的臺階,它 提供了一種程式語言而不只是編輯器命令。常用來從大文字檔案中提取資料元素,並將它們格式化成可讀的 報告。在gawk程式語言中,你可以做下面的事情:

  • 定義變數來儲存資料;
  • 使用算術和字串操作符來處理資料;
  • 使用結構化程式設計概念(比如if-then語句和迴圈)來為資料處理增加處理邏輯;
  • 通過提取資料檔案中的資料元素,將其重新排列或格式化,生成格式化報告

在上面的截圖中,已經展示了gawk的用法,和一些功能引數。

gawk會將如下變數分配給它在文字行中發現的資料欄位,$0代表整個文字行;$1代表文字行中的第1個數據欄位; $2代表文字行中的第2個數據欄位; $n代表文字行中的第n個數據欄位。awk中預設的欄位分隔符是任意的空白字元。

将 AWK 输入数据划分为记录

AWK 程式由規則 組成,它們是一些模式,後面跟著由換行分隔的操作。當 AWK 執行一條規則時,它在輸入記錄中搜索給定模式的匹配項,然後對這些記錄執行給定的操作。

比如我用上次那個文字 testfile

使用gawk '{print $4}' testfile 

除了print操作,我們還可以使用其他的操作

如果你對分隔符有特殊的要求,那麼你還可以使用 -F後面接分隔符,比如gawk -F: '{print $1}' /etc/passwd

你也可以組合使用命令列,比如echo "My name is Rich" | gawk '{$4="Christine"; print $0}'

第一條命令會給欄位變數$4賦值。第二條命令會列印整個資料欄位。

gawk可以使用BEGIN在處理資料前或者處理後END執行指令碼。

在 GAWK 中,其模式匹配機制類似於 egrep 命令的模式匹配機制。要僅輸出那些匹配模式的記錄,可以在規則中指定該模式,使用斜槓字元括起來。

 awk '/dog2/ { print }' testfile 去匹配下面的記錄

可以寫成下面的多個匹配 awk '/dog2/ && /fox/  { print }' testfile

雖然awk和gawk有著強大的功能,但是用的不是很多,暫時就先寫這麼多吧!

 

參考:

http://www.runoob.com/linux/linux-comm-awk.html

https://www.cnblogs.com/xudong-bupt/p/3721210.html