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的出现次数。