awk是文本三劍客之一,其實awk是一種語言,awk被設計用于數據流。它非常有趣,其原因在于它可以對列和行進行操作。例如數組,函數,這是它和C語言有相同地方。
Awk基本結構:
Awk ‘BEGIN{ print“start”} pattern {commands} END {print “end“}
一個awk腳本通常有3部分構成;BEGIN語句塊、END語句塊和能夠使用模式匹配的通用語句塊。著3部分是可選的。它們中任何一部分都可以不出現再腳本中。腳本通常會被包含在單引號和雙引號中。
Awk的工作方式:
1. 執行BEGIN{commands}語句塊中的語句。
2. 從文件或stdin中讀取一行,然后執行pattern{commands}。重復這個過程,直到文件全部被讀取完畢。
3. 當讀到輸入流末尾時,執行END{commands}語句塊。
這就類似while循環,每讀一行時,它就會檢查該行和提供的樣式是否匹配。樣式本身可以是正則表達式、條件以及匹配范圍等。如果當前匹配該樣式,則執行{}中的語句。
echo –e “line1nline2” | awk ‘BEGIN{print “start”}
{print} END {print “END”}’
特殊變量:
例如:
echo {1..10} | awk –v FS=” ”’{print $1,$3}’
echo –e “line1 f2 f3nline2 f4 f5nline3 f6 f7”
awk ‘{ “Line no:”NR”,No of fields:”NF,””$0”=$0,
“$1=”$1,”$2=”$2,”$3=”$3}’
那我來個復雜點的語句。
seq 5 | awk ‘BEGIN{sum=0;print “Summation:”}{print $1”+”;sum+=$1} END {print “==”;print sum}’
實際的應用
當然有的人說就這樣有啥了不起的啊,來點實用的吧?。?!
那好,就來點實用的?。?!
在linux有個passwd的文件,里面存著各個用戶的賬戶密碼來著
例如:
像這樣的排版一定看著頭大,不急來看看awk的威力吧!
awk –F: ‘{print $1”t”$6}’ /etc/passwd
awk‘/^r..t/{print $0}’ /etc/passwd 滿足r..t這種形式后才打印。像r..t這種形式的也是正則表達式,大伙也可以查查關于正則表達式。
這個就是Linux的命令之美,一條簡單的命令可以把你想要的東西給展示出來,美劇里的大黑客基本就是敲命令,你想想要是一個點鼠標的黑客,那該多low啊??!