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 選擇需要匯出的文字 首先檢查是否有預設選擇的文字 如果有上圖那樣藍色的選項,說明有預設選擇的文字,清除所有預設選擇的文字 確保沒有...