awk 命令胡使用shell
awk是一款功能強大的文字處理軟件,能夠以列爲單位,來處理並顯示出咱們須要的信息,其用法以下:數組
1)awk option 'parttern { cmd }......'bash
awk 經常使用的選項是-F 指定 列的分隔符ide
awk - F : 'partern {action}' 就是每行以:做爲分隔符,第一列爲$1,$2,.....其中$0表明整行。awk中有一個內置的變量NF,指當前行的列的個數。一般用$NF表示當前行的最後一列。ci
awk -F : '{print $1,$NF}' /etc/passwd 輸出/etc/passwd的第一列和最後一列。cmd
2)awk parttern的類型it
BEGIN 是awk內置的parttern,在awk處理各行以前,執行BEGIN後面的cmd.io
END 是awk內置的parttern,在awk處理各行以後,執行END後面的cmd.ast
awk -F : 'BEGIN {printf "%-10s%-10s\n","first","last"}{printf "%-10s%-10s\n",$1,$NF}' /etc/passwd 輸出每一行的第一列和第七列,在輸出以前,打印一個信息提示行。class
判斷表達式
awk -F : '$3 >=500 {print $1,$NF}' /etc/passwd 輸出/etc/passwd中UID大於500的用戶名及SHELL。
正則表示式
awk -F : ' $NF ~ /bash$/ {print $1,$NF}' /etc/passwd
3)awk還支持自定義變量,支持數組,for,while ,switch case等語句。
awk -F: -v count=0 '$NF ~ /bash$/{count++;print $1,$NF} END{print "total",count}' /etc/passwd 輸出 /etc/passwd中,shell是bash的用戶名及shell,最後統計個數。
awk -F: '$NF ~ /bash$/{count++;print $1,$NF} END{print "total",count}' /etc/passwd 也能夠實現上述功能,awk裏面的變量能夠在使用的時候再定義,其默認值爲0。
awk -F : 'BEGIN {printf "%-10s%-10s\n","shelltype","count"}{shell[$NF]++}END{for (i in shell) print i,shell[i]}' /etc/passwd 統計/etc/passwd中,每種不一樣類型的SHELL的出現次數。