一、前述
awk是一個強大的文字分析工具。相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。
簡單來說awk就是把檔案逐行的讀入,(空格,製表符)為預設分隔符將每行切片,切開的部分再進行各種分析處理。
二、具體
1、基礎知識點
awk -F '{pattern + action}' {filenames}
支援自定義分隔符
支援正規表示式匹配
支援自定義變數,陣列 a[1] a[tom] map(key)
支援內建變數
ARGC 命令列引數個數
ARGV 命令列引數排列
ENVIRON 支援佇列中系統環境變數的使用
FILENAME awk瀏覽的檔名
FNR 瀏覽檔案的記錄數
FS 設定輸入域分隔符,等價於命令列 -F選項
NF 瀏覽記錄的域的個數
NR 已讀的記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符
支援函式
print、split、substr、sub、gsub
支援流程控制語句,類C語言
if、while、do/while、for、break、continue
$0表示所有域, $1表示第一個域, $n表示第n個域。 預設域分隔符是空格鍵或tab鍵。
2、舉例
只是顯示/etc/passwd的賬戶:CUT
awk -F':' '{print $1}' passwd
只是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以逗號分割,而且在所有行開始前新增列名name,shell,在最後一行新增"blue,/bin/nosh"(cut,sed)
awk -F':' 'BEGIN{print "name,shell"} {print $1 "," $7} END{print "blue,/bin/nosh"}' passwd
搜尋/etc/passwd有root關鍵字的所有行
awk '/root/ { print $0}' passwd
統計/etc/passwd檔案中,每行的行號,每行的列數,對應的完整行內容
xxx Math English C++ Experiment Monkey 100 90 95 Good Cat 80 100 60 Perfect Dog 90 60 70 Great Tiger 95 85 90 Fantastic
Administrator@51B6904C3C8A485 ~/learn_awk $ awk '{print $2}' test.txt Math 100 80 90 95 Administrator@51B6904C3C8A485 ~/learn_awk $
看這篇部落格吧 ,講得很好https://blog.csdn.net/stpeace/article/details/46848873