4、模式匹配(地址定界)
1、空值,没有定义,默认就将文件中所有的行,放入awk进行循环
2、对固定的1-3行进行 *** 作
sed -n ‘1,3p‘ /etc/passwd
awk ‘1,3{print}‘ /etc/passwd(错误用法) //awk默认不支持使用1-3 1,3这样数值的直接写法
awk ‘NR>=1&&NR<=3{print}‘ /etc/passwd //通过NR变量来指定
3、/pat1/
sed -n /r..ter/p /etc/passwd
awk ‘/r..ter/{print}‘ /etc/passwd
4、/pat1/,/pat2/ 第一次匹配pat1到第一次匹配pat2之间的行
awk ‘/sshd/,/over/{print}‘ /etc/passwd
练习:判断/^r..ter/,/^user.*\>/之间的行的用户,是bash的用户,并显示用户的用户名,和UID
awk -F: ‘/^r..ter/,/^user.*\>/{if($NF==/bin/bash);print $1,$3}‘ /etc/passwd
5、模式匹配可以直接使用判断语句
awk -F: ‘$NF=="/bin/bash"(print $1,$3)‘ /etc/passwd
6、BEGIN和END
BEGIN定义在默认循环进行 *** 作前所要执行的语句;
awk -F: ‘BEGIN{printf "shell程序为bash的用户为:\n"}$NF=="/bin/bash"{print $1,$3}‘ /etc/passwd
awk -F: ‘BEGIN{printf "shell程序为bash的用户为:\n"}$NF=="/bin/bash"{print $1,$3}END{printf "end\n"}‘ /etc/passwd
5、 *** 作符
运算 *** 作符:
+ - * / %(取模) ^(幂) //(向下取整)
比较运算符:
== != > < >= <= ~!~
逻辑 *** 作符:
&&
||
!
赋值 *** 作符:
= += -= /= *= %= ^= //=
条件表达式:
条件语句?条件成立语句;条件不成立的语句
6、常见action
print、printf以及其它任何命令的 *** 作都是action
1、Expressions 常见表达式
2、control、statement控制语句 例如:if、while等
逻辑关系语句判断来进行结合
3、组合语句compound、statements
/pat1/{{}{;}}
4、input、statements 输入语句
5、output、statements 输出语句
7、常见语言(if while do for break continue delete switch)
1、if语句
语法格式:if(条件表达式){执行语句}
if(条件语句){执行语句}else{执行语句}
awk ‘/^Title/{if(NF<=2){print}else{print "参数太少"}}‘ /boot/grub/grub.conf
awk ‘/^Title/{if(NF>=2){print &4}‘ /boot/grub/grub.conf
2、while语句
只有对行参数进行遍历的时候才使用while语句
语法格式:while(条件表达式){循环体}
练习:过滤grub.conf文件中kerne这一行,然后每一个参数的字符个数进行统计,并显示出来
awk ‘/^[[:space:]]*kernel\>{i=1;while(i<=NF){print length($i);i++}}‘ grub.conf
3、for语句
语法格式:for(初始值,条件判断;初始值控制语句){循环体}
awk ‘/^[[:space:]]*kernel\>/{for(i=1;i<=NF;i++){printf $i"\t";print length($i)}}‘ grub.conf
循环建议使用for语句
在awk中,for语句也可以使用和shell中一样的格式:
for(i in 列表){循环体}
echo "liang hao tian shi ge guai bao bao"
4、do-while循环
语法格式:do{循环体} while(循环条件)
注意和while的区别:while语句只有在满足条件的时候,才会进入循环,而do-while会先执行循环体(一次,再进行条件判断)
5、循环跳出语句
break[n] 跳出n次循环
continue 跳出本次循环
next 跳出默认的当前循环
awk ‘{if(NR%2==1){next}else{print}}‘ /etc/passwd
6、switch类似于case
语法格式:
switch(表达式){case 模式匹配值:执行语句;case 模式匹配值:执行语句;...default:执行语句}
8、数组
在awk中,数组和shell中的数组特性相同;
注意:awk中数组不用定义,只要使用了,就有值为空的默认数组,这在做数据统计的术后非常常见!!!
行遍历 --> 实际上就是整个文件的遍历
列遍历 --> 取对象固定某列中的,相同数据的统计
注意:数组通过for语句,再给其它变量进行赋值的时候,赋值的是index索引信息;
9、函数
1、内置函数
函数的调用:funcation(参数)
length() 统计字符串长度
数学运算上使用的函数,例如:sin()、cos()、tan()
sub(x,x,x) 替换第一个匹配到的值
awk ‘{print sub(o,O,$1)}‘ /etc/fstab //将文件中第一列的o替换为O
gsub(x,x) 替换该行所匹配到的所有值
split(x,x) 指定分隔符去切割文件
netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");print ip[1]}‘
2、自定义函数
总结以上是内存溢出为你收集整理的awk补充全部内容,希望文章能够帮你解决awk补充所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)