1基礎用法 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
#以:為定界,---為輸出定界符
2.AWK if的使用 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就輸出
3.AWK 變量的使用及内置變量 awk -v x=$z -F" " NR==x'{print$0}' /etc/ansible/hosts
#awk 不能直接調用變量,需要用-v 聲明下變量,變量z是shell裡面的,x是awk内部的,把z變量指派給x,x就能在後面調用了,調用無需其他符号直接使用
echo "$*"|awk -v y=$y -F" " '{print $y}'
#在{prinf } 記憶體引用變量 ,必須用'' 單引号,雙引号不可以
AKW取反
echo "1 2 3 4" |awk -F" " '{$1="";print$0}'
#會顯示 2 3 4
echo "1 2 3 4" |awk -F" " '{$NF="";print$0}'
#顯示1 2 3
echo "10.1.1.1"|awk -F"." '{print NF}'
#檢視有幾個字段數
echo "10.1.1.1"|awk -F"." '{print $NF}'
#檢視最後一個字段的内容
awk的使用及printf 格式輸出1基礎用法2.AWK if的使用3.AWK 變量的使用及内置變量4.BEGIN和END5.printf格式化輸出6.作用範圍之正規表達式 awk '{FS=":";OFS="***"}{print NR,$1,$2,$3}' /etc/passwd
#以:分隔符,以"***"為顯示分隔符,顯示行号及$1 $2 $3
awk的使用及printf 格式輸出1基礎用法2.AWK if的使用3.AWK 變量的使用及内置變量4.BEGIN和END5.printf格式化輸出6.作用範圍之正規表達式 4.BEGIN和END awk -F":" 'BEGIN{print"使用者""\t""ID"}{if($3<5)print$1"\t"$3}END{print"結束"}' /etc/passwd
#BENGIN和END可以了解為頁眉頁腳,美化輸出的
awk的使用及printf 格式輸出1基礎用法2.AWK if的使用3.AWK 變量的使用及内置變量4.BEGIN和END5.printf格式化輸出6.作用範圍之正規表達式 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是無論條件滿足否都會執行一次
5.printf格式化輸出 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位小數。
6.作用範圍之正規表達式 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
#和上面一樣,隻不過上面是||的寫法,這個是|的寫法