AWK工做原理正則表達式
1.awk使用行做爲輸入,並將這一行賦給內部變量 $0 每⼀行也可稱爲一個記錄,以換行符結束。dom
2.awk進行字段分解,每一個字段存儲在已編號的變量中,從 $1 開始ide
3.awk默認狀況下的分隔符是空格, 是由內部變量 FS 來肯定字段分隔符。初始 FS 爲空格函數
4.awk打印字段,將以設置的方法使用 print 函數打印spa
5.awk在打印的字段間加上空格,由於 $1,$3 之間有一個逗號。逗號它映射爲另外一個內部變量,稱爲輸出字段分隔符 OFS 默認爲空格it
6.awk輸出以後,將從文件中獲取另⼀行,並將其存儲在 $0 中,覆蓋原來的內容,而後將新的字符串分隔成字段並進行處理。該過程將持續到全部行處理完畢class
AWK用法awk
一、使用AWK匹配關鍵字
變量
awk '/關鍵字或正則表達式/' filename 原理
[root@localhost ~]# awk '/[al1]/' /etc/hosts 輸出含有a或l或1的行
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
awk '//' filename 會輸出全部的行
二、使用AWK進行print動做
awk -F ':' '{print $1}' filename
[root@localhost ~]# awk -F ':' '{print $1}' /etc/passwd 以:爲字段分隔符,輸出第一個字段
三、使用AWK執行匹配+print動做
awk -F ':' '/root/ {print $1,$3}' /etc/passwd 在文件中匹配含有root的行,並打印第一和第三個字段
AWK內部變量
NR行號
[root@Shell ~]# awk '{print NR,$0}' /etc/passwd #打印整個文本的行號
[root@Shell ~]# awk 'NR<=3' /etc/passwd #打印文件的前三行
NF最後一行
[root@localhost ~]# awk -F ':' '{print $NF}' /etc/passwd #打印每行的最後一個字段
FS 指定字段分割符,默認空格
OFS 輸出字段分隔符
[root@localhost ~]# awk 'BEGIN{FS=":";OFS="+++"} /^root/ {print $1,$2}' /etc/passwd #指定分隔符爲:並用+++隔開輸出的字段
root+++x
RS 輸入記錄分隔符,默認爲換行符
[root@Shell ~]# awk -F: 'BEGIN{RS=" "} {print $0}' /etc/hosts
未完待續!!!