awk -F: '{print$1}' /etc/passwd #顯示passwd 的用戶名 awk -F: '$NF=="/bin/bash"{print $1,$NF}' /etc/passwd #顯示出shell爲 "/bin/bash" 的用戶 awk 'BEGIN{print"開頭"}{print$0}END{print"結束"}' /etc/passwd #BENGIN能夠理解爲頁頭,END理解爲頁腳 df -h|awk -F% '/^\/dev/{print $1}'|awk '{if($5>=20)print $1,$5"%"} #先匹配dev,應爲dev開頭的纔是真正掛載的找出磁盤空間大於20%的,思路先用%切成兩段,把第一段管道給後面,這是$5已經取出想要的值了,進行比較大於20就輸出 awk '{FS=":";OFS="---"}{print NR,$1,$2,$3}' /etc/passwd #以:爲定界,---爲輸出定界符
awk -F":" '{if($1=="root")print$0}' /etc/passwd #單if使用,第一個字段內容等於"root"就顯示。 awk -F":" '($1=="root"){print$0}' /etc/passwd #另外一種寫法,和上面同樣,不用帶if 用()就能夠了 awk -F":" '{if($1=="root")next}{print$0}' /etc/passwd #單if使用,第一個字段等於"root"就跳過,顯示後面的,和上面正好顯示相反的 #next 本次直接跳過,exit直接退出,可是有EOF仍是要執行EOF的內容 awk -F: '{if(NR>=2&&NR<=10)print $1}' /etc/passwd #and的用法,表示顯示第2到10行數據 awk -F: '{if(NR==2||NR==10)print $1}' /etc/passwd #or的用法,表示顯示第2和第10行 awk -F: '{if(NR!=2)print $1}' /etc/passwd #取反的用法,除了第二行,其餘都顯示 awk -F: '{if($3<=500){print$1,$3,"系統用戶"}else{print$1,$3,"普通用戶"}}' /etc/passwd #雙分支使用,以ID號爲參數,大於500的輸出爲系統用戶 ,其餘輸出爲普通用戶 實戰 df -h|awk -F% '/^\/dev/{print $1}'|awk '{if($5>=20)print $1,$5"%"}' #功能,找出磁盤空間已用大於%20的,思路先用%切成兩段,把第一段管道給後面,這是$5已經取出想要的值了,進行比較大於20就輸出
awk -v x=$z -F" " NR==x'{print$0}' /etc/ansible/hosts #awk 不能直接調用變量,須要用-v 聲明下變量,變量z是shell裏面的,x是awk內部的,把z變量賦值給x,x就能在後面調用了,調用無需其餘符號直接使用
awk '{FS=":";OFS="***"}{print NR,$1,$2,$3}' /etc/passwd #以:分隔符,以"***"爲顯示分隔符,顯示行號及$1 $2 $3
awk -F":" 'BEGIN{print"用戶""\t""ID"}{if($3<5)print$1"\t"$3}END{print"結束"}' /etc/passwd #BENGIN和END能夠理解爲頁眉頁腳,美化輸出的
BEGIN的幾種循環寫法 awk 'BEGIN{for(i=0;i<=5;i++){print i}}' awk -v i=0 'BEGIN{ while(i<=5){print i;i++}}' awk 'BEGIN{i=0;while(i<=5){print i;i++}}' awk 'BEGIN{i=7;do{print"測試"i;i++}while(i<5)}' 幾種循環的寫法,最後一種do是不管條件知足否都會執行一次
一種高級用法
cat /etc/fstab |awk '/^UUID/||/^\/dev/{fs[$3]++}END{for(i in fs){print i,fs[i]}}'
黃色表示匹配出UUID或者 /dev開頭的行,紅色以$3的字段名爲數組的索引每次對數組的值加1,數組的值無需初始化默認爲0,藍色以數組的索引做爲循環列表,顯示i i就是$3的裏的內容,fs[i]是每次累加最後統計的和正則表達式
awk -F: '{printf "%-20s %-3s %-1s\n",$1,$2,$3}' /etc/passwd #$1對應"%-20s",$2對應"%-1s",$3對應"%-1s\n", "% s" %和s是固定格式 -表示左對齊默認右對齊 20表示顯示字符不足20個用空格補全到20個字符
其餘例子 printf "%s %s %s %s %s\n" a b c d e f g h i j 表示每一個%s 對應這一個值輸出,像這個格式位有5個,有10個值,正好輸出會輸出成兩排 printf "%-10s %-8s %-4.3f\n" 郭芙 女 47.9876 %-10s 指一個寬度爲10個字符(-表示左對齊,沒有則表示右對齊),任何字符都會被顯示在10個字符寬的字符內,若是不足則自動以空格填充,超過也會將內容所有顯示出來。 %-4.2f 指格式化爲小數,其中.2指保留2位小數。
awk -F":" '/\/bin\/bash/{print $1}' /etc/passwd #表示只匹配到"bin/bash"的,才處理 awk -F":" '!/\/bin\/bash/{print $1 $7}' /etc/passwd #加個!號取反,匹配到"bin/bash"的不處理,其餘都處理 awk -F":" '/\/bin\/bash/||/\/bin\/csh/{print $1 $7}' /etc/passwd #表示匹配到"/bin/bash","/bin/csh"才處理 awk -F":" '/\/bin\/bash|\/bin\/csh/{print $1 $7}' /etc/passwd #和上面同樣,只不過上面是||的寫法,這個是|的寫法