awk的使用方法 一

2021-09-28 11:27:53 字數 1949 閱讀 6006

awk的工作方式是: 通過給定的引數,去逐行讀取文字(或通過管道傳遞的內容),通過模式判斷,再執行對應的動作

awk如何處理每一行的內容: awk每讀一行,會將這一行的內容定義為$0, 再通過空格將這一行切割成多個字串, 按順序分別定義為$1 $2 $3 $4......以此類推

模板:

awk -options 'pattern ;' file
例如: 

awk -f ":" '$1=="root" ' /etc/passwd
解釋:

options -> 引數(可以做一些定義)

pattern -> 模式(常見的有判斷、搜尋、和兩個特殊模式)

action  -> 動作(常見的是print,或定義乙個變數,或for,while,if等等)

常用解析

1、以「:」作為分隔符,第一列等於root的輸出

awk -f ":" '$1=="root" ' /etc/passwd

#解讀-f ":" #引數, awk預設為空格,這裡根據實際需要選擇分隔符為':'; 

$1=="root" #模式, 類似於if,判斷條件是否成立;

#動作,最基本的動作就是print輸出內容

2、搜尋每一行是否出現「root」

awk -f ":"  '/root/ ' /etc/passwd

#解讀 

/root/ #搜尋這一行是否存在'root'這個字串

3、多個模式+動作

awk -f ":" '$1=="root" ; $1 == "gdm" ;' /etc/passwd

#多個模式+動作用';'隔開, 不使用';'也行, 就是不太好看

$1=="root" ; #第乙個模式+動作

$1=="gdm" ; #第二個模式+動作

4、乙個動作內包含多個函式

#動作內有兩個print函式, 中間用';'隔開,當條件為真,兩個命令都執行, 寫法與shell無異

awk -f ":" '$1=="root" ;' /etc/passwd

5、乙個模式內包含多個條件

#該模式內有兩個條件, 用&&關聯, 寫法與shell無異

awk -f ":"  '/root/ && $2=="x" ' /etc/passwd

6、無引數或無模式或無動作

awk '/root/ ' /etc/passwd    #不定義切割符

awk -f ":" '' /etc/passwd #不匹配任何引數, 將每一行的第一列全部輸出

awk -f ":" '/root/' /etc/passwd #不執行任何動作, 但是還是將匹配到的行輸出

7、特殊模式(begin和end是一種特殊的模式,用於檔案讀取之前和檔案讀取之後的操作)

#格式

awk  'begin ; pattern ; end ' file

#示例awk -f ":" 'begin ; $1=="root" ; end ;' /etc/passwd

#在文字操作之前進行初始化設定(我定義了變數s=1)

awk -f ":" 'begin ; $1 == "tss" && $2 == "x" ;end ' /etc/passwd

#特殊說明一下,下面的命令也能執行:

awk -f  ":" 'end ;begin ; $1 == "root" ;end ;end ;begin ' /etc/passwd

awk -f  ":" 'end begin $1 == "root" }end end begin ' /etc/passwd

下一章講動作的使用技巧

awk 使用方法

gnu awk 文字處理三工具 grep,sed,awk grep,egrep,fgrep 文字過濾工具 pattern sed 行編輯器 模式空間 保持空間 awk 報告生成器,格式化文字輸出 awk aho,weinberger,kernighan new awk,nawk gnu awk,ga...

awk的使用方法 三

常用的awk內建變數 序號 名稱 描述 1 argc 命令列引數的數目。2 ar 包含命令列引數的陣列。3 argind 當前被處理的檔案的ar 的index 從0開始算 4 binmode 在non posix系統中,檔案的i o指定使用 binary 模式。5 convfmt 數字轉換格式 預設...

BMFont 使用方法 一

下面隨便找乙個字型庫 ttf 華文琥珀,字型樣板如下 開啟bmfont,1 字型設定 2 設定匯出引數 設定匯出大小,在此 設定為 512 64 畫素 設定文字效果 3 選擇需要匯出的文字 首先檢查是否有預設選擇的文字 如果有上圖那樣藍色的選項,說明有預設選擇的文字,清除所有預設選擇的文字 確保沒有...