awk命名源自於它的三大作者名字的首字母,分別是Alfred Aho、Brian Kernighan、Peter Weinberger。awk是一個強大的文本分析工具,相當於grep的查找和sed的編輯功能,根據分隔符對每行數據切片,切開的部分在進行各種分析處理,處理的數據可以來自標準輸入、一個或多個文件,或其它命令的輸出。常用作腳本使用。
」AWK語法awk [options] 'BEGIN{ print "start" } 『pattern{ commands }』 END{ print "end" }' fileBEGIN、END是AWK的關鍵字部,因此必須大寫,屬於可選部分。BEGIN命令快是處理每行數據之前執行的操作。END命令是處理完每行數據之後執行的操作,常用於列印輸出統計結果等。
awk [options] 'pattern{action}' {filenames}
pattern:匹配模式,表示AWK在數據中查找的內容awk匹配模式pattern參數
awk常用參數
awk命令中常用的內置變量
$n:比如$1 $2 $3,取第幾列信息
NF:瀏覽記錄的域的個數, 根據分隔符分割後的列數OFS:輸出列分隔符,用於列印時分割欄位,默認為空格ORS:輸出行分隔符,用於列印時分割記錄,默認為換行符awk流程控制{if(表達式){語句;語句;...}}
{if(表達式){語句;語句;...}else{語句;語句;...}}
{if(表達式){語句;語句;...}else if(表達式){語句;語句;...}else if(表達式){語句;語句;...}else{語句;語句;...}}
學習案例:使用系統passwd文件進行演示
1.列印第一列
awk -F ':' '{print $1}' /etc/passwd2.列印第二行的內容
awk -F ':' 'NR==2{print $0}' /etc/passwd3.列印第5行到第10行的第1列
awk -F: '{if(NR>=5 && NR<=10) print $1}' /etc/passwd4.指定多個分隔符
echo "abc:def/linux" | awk -F '[:/]' '{print $1","$2","$3}'5.統計passwd文件每行的行號、列數、行內容
awk -F ':' '{print "行號:" NR ",列數:" NF ",行內容:"$0}' /etc/passwd6.列印以mysql開頭的行
awk '/^mysql/' /etc/passwd7.過濾IP
ifconfig | awk '/broadcast/{print}' | awk -F " " '{print $2}'8.統計/etc/passwd下的帳戶數
awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd9.列印字符串長度大於3的單詞
echo "I am a teacher" |awk '{for(i=1;i<=NF;i++) if(length($i)>3) print $i}'