自學Linux Shell19.1-gawk程序基礎特性

點擊返回 自學Linux命令行與Shell腳本之路html

19.1-gawk程序基礎特性

linux世界中最普遍使用的兩個命令行編輯器:linux

  • sed
  • gawk

1. gawk概念

awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤其強大。簡單來講awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行各類分析處理。編程

awk有3個不一樣版本: awk、nawk和gawk,未做特別說明,通常指gawk,gawk 是 AWK 的 GNU 版本。bash

  • 定義變量來保存數據
  • 使用算術和字符串操做符來處理數據
  • 使用結構化編程概念來爲數據處理增長處理邏輯
  • 經過提取數據文件中的數據元素,將其從新排列或格式化,生成格式化報告

gawk的報告生成能力一般用來從大文本文件中提取數據元素,並將它們格式化成可讀 的報告,完美的例子是格式化日誌文件。編輯器

在全部的發行版中都沒有默認安裝gawk程序。工具

 

2. gawk格式化

1 awk '{pattern + action}' {filenames}
  • -F fs 指定行中劃分數據字段的字段分隔符
  • -f progfile 從指定的文件中讀取程序
  • -v var=value 定義gawk程序中的一個變量及其默認值
  • -mf N 指定要處理的數據文件中的最大字符段數
  • -mr N 指定數據文件中的最大數據行數
  • -w keyword 指定gawk的兼容模式或告警等級

gawk強大之處在於能夠寫腳原本讀取文本行的數據,而後處理並顯示數據。大數據

2.1 從命令行讀取程序腳本

必須將腳本命令放到兩個花括號{ } 中。spa

 

以上運行gawk’{print"hello word"}‘不會有任何反應,print命令會將文本打印到STDOUT,但沒有在命令行上指定文件名,因此gawk只會從STDIN接收數據。
若輸入一個文本並按下回車鍵,無論你在數據流中輸入什麼,都會獲得一樣的輸出hello word 。
ctrl+D組合鍵會在bash中產生一個EOF字符,即是數據流已經結束。命令行

2.2 使用數據字段變量

gawk會自動給一行中的每一個數據元素分配一個變量,默認狀況下,會將以下變量分配給它在文本行中發現的數據字段:3d

  • $0表明整個文本;
  • $1表明文本行中的第一個數據字段;
  • $2表明文本行中第二個字段;
  • $n表明文本行中第N個字段
  • 每一個數據字段是經過字段分隔符劃分的,默認字段分割符是任意的空白字符(如空格或製表符)。

2.3 在程序腳本中使用多個命令

 若是要在命令行的腳本中使用多條命令,只要在命令之間放個分號;便可

 

2.4 從文本中讀取程序

  • 容許將程序儲存在文件中,而後在命令行中引用。
  • 能夠在文件中指定多條命令,只要一條命令放一行就能夠,不須要使用分號。

 

2.5 從處理數據前/處理數據後運行腳本

 默認狀況,gawk會從輸入中讀取一行文本,而後針對該行的數據執行程序腳本,但有時可能須要在處理數據前或數據後運行腳本:

  • BEGIN關鍵字,強制gawk在讀取數據前執行BEGIN關鍵字後指定的程序腳本
  • END關鍵字,gawk在讀完數據以後執行END關鍵字後的程序

 

相關文章
相關標籤/搜索