AWK,aho,weinberger,kernighan
GAWK,GNU awk
我们在linux上使用的awk其实是gawk的链接文件
基本用法
gawk [options] 'program' file
program:PATTERN
语句之间用分号分割
ps:‘{print $1,$2,$3}’
options:
-F:指明输入时用到的字段分隔符,默认是空白分隔符
cat/etc/fstab | tail -4 | awk '{print $1,$4}'
打印出切片第一字段和第四字段
ps:用逗号分隔各个字段
1、内建变量:FS,输入input fieldseperator OFS,输出 RS=' ' 输入空格作为换行符 ORS=' '输出时
NF,'{print NF}' 每行字段数 $NF最后一字段
NR,'{print NR}' 行编号 FNR,每个文件
ARGC,命令行参数的个数
ARGV
awk -v FS=':' -vOFS='-' '{print $1,$3}' /etc/passwd
指定输入:分隔符,输出-分隔符
2、自定义变量:-v var=value,区分大小写
awk -vtest='hello' 'BEGIN{print test}' /etc/fstab
awk'{test="helo";print test,$1}' /etc/fstab
3、printf命令
格式化输出,printf FORMAT,item1,item2,……
FORMAT必须给出,不回自动换行,需要显示给出\n,需要分别为后面没个item指定格式符
格式符:%c,ascii码 %d,显示十进制整数 %e,科学计数法 %f,浮点数 %g,%G科学计数或浮点数 %s显示字符串 %u无符号 %%百分号自身 左对齐减号,右对齐加号
awk -F: '{printf"username:%-8s,uid:%d\n",$1,$3}' /etc/passwd
4、算数操作符:+,-,*,/,^,%
字符串操作符号:没有符号的操作符字符串连接,赋值操作符,比较操作符,模式匹配~不匹配!~,逻辑操作符&&或||非!,函数调用function(),条件表达式selector?if-true-expression:if-false-expression
awk -F:'{$3>=1000?usertype="common user":usertype="sysadmin orsysuser";printf "%8s:%-s\n",$1,usertype}' /etc/passwd
5、pattern
empty:空模式,匹配每一行
/pattern/仅处理匹配到的
relational关系表达式,结果为真为假,结果为真的才被处理,一般结果为非0值都为真
6、action
expressions表达式
controlstatements:if,while
compoundstatements组合语句
input statements
output statements
7、控制语句
if(条件){true}
if(条件){true} else {false}
while(条件){true}
do{循环}while()
for(expr1;expr2....){循环}
deletearray[index]删除数组中元素
deletearray删除整个数组
exit
awk -F:'{if($3>=500){printf "commonusr:%-8s\n}",$1} else {printf"sysusr:%-8s\n",$1}}' /etc/passwd
awk -F:'{if($NF=="/bin/bash") print $1}' /etc/passwd
awk'{if(NF>5) print }' /etc/fstab
awk -F:'/^root/{i=1;while(i<=NF){if(length($i)>=4){print $i,length($i)};i++}}'./passwd