AWK工作原理
1.awk使用行作爲輸入,並將這一行賦給內部變量 $0 每⼀行也可稱爲一個記錄,以換行符結束。
2.awk進行字段分解,每個字段存儲在已編號的變量中,從 $1 開始
3.awk默認情況下的分隔符是空格, 是由內部變量 FS 來確定字段分隔符。初始 FS 爲空格
4.awk打印字段,將以設置的方法使用 print 函數打印
5.awk在打印的字段間加上空格,因爲 $1,$3 之間有一個逗號。逗號它映射爲另一個內部變量,稱爲輸出字段分隔符 OFS 默認爲空格
6.awk輸出之後,將從文件中獲取另⼀行,並將其存儲在 $0 中,覆蓋原來的內容,然後將新的字符串分隔成字段並進行處理。該過程將持續到所有行處理完畢
AWK用法
1、使用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 會輸出所有的行
2、使用AWK進行print動作
awk -F ':' '{print $1}' filename
[root@localhost ~]# awk -F ':' '{print $1}' /etc/passwd 以:爲字段分隔符,輸出第一個字段
3、使用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
未完待續!!!