awk基本用法和工作原理详解(3)

awk语句中是根据pattern条件,过滤匹配的行,再做处理。
1.未指定:表示空模式,匹配每一行
2./regular expression/:仅处理能够模式匹配到的行,支持正则表达式,需要用/ /括起来
3.关系表达式:结果为“真”才会被处理。真:结果为非0值,非空字符串。假:结果为空字符串或0值
4./pat1/,/pat2/:startline,endline ,行范围,支持正则表达式,不支持直接给出数字格式
5.BEGIN{}和END{}:BEGIN{} 仅在开始处理文件中的文本之前执行一次。END{}仅在文本处理完成之后执行 一次

示例:

awk '/^UUID/{print $1}' /etc/fstab awk '!/^UUID/{print $1}' /etc/fstab awk -F: ‘/^root\>/,/^nobody\>/{print $1}' /etc/passwd awk -F: ‘(NR>=10&&NR<=20){print NR,$1}' /etc/passw awk -F: 'i=1;j=1{print i,j}' /etc/passwd awk ‘!0’ /etc/passwd ; awk ‘!1’ /etc/passwd awk –F: '$3>=1000{print $1,$3}' /etc/passwd awk -F: '$3<1000{print $1,$3}' /etc/passwd awk -F: '$NF=="/bin/bash"{print $1,$NF}' /etc/passwd awk -F: '$NF ~ /bash$/{print $1,$NF}' /etc/passwd awk -F : 'BEGIN {print "USER USERID"} {print $1":"$3}END{print "end file"}' /etc/passwd awk -F: 'BEGIN{print " USER USERID"}{printf "|%8s| %10d|\n",$1,$3}END{print "END FILE"}' /etc/passwd awk -F : '{print "USER USERID“;print $1":"$3} END{print"end file"}' /etc/passwd awk -F: 'BEGIN{print " USER UID \n---------------"}{print $1,$3}' /etc/passwd awk -F: 'BEGIN{print " USER USERID\n----------------------"}{printf "|%8s| %10d|\n",$1,$3}END{print "----------------------\nEND FILE"}' /etc/passwd awk -F: 'BEGIN{print " USER UID \n---------------"}{print $1,$3}'END{print "=============="} /etc/passwd seq 10 |awk ‘i=0’ seq 10 |awk ‘i=1’ seq 10 | awk 'i=!i‘ seq 10 | awk '{i=!i;print i}‘ seq 10 | awk ‘!(i=!i)’ seq 10 |awk -v i=1 'i=!i' 5.awk的action

awk中的action可以分为以下5类:
1.表达式语句,包括算术表达式和比较表达式,就是用进行比较和计算的。
2.控制语句,用作进行控制,典型的就是if else,while等语句,和bash脚本里面用法差不多。
3.输入语句,用来做为输入,变量赋值就算是。
4.输出语句,用来输出显示的,典型的是print和printf
5.组合语句,这个很多理解,就是多种语句的组合

下面就具体说下一些语句的具体内容,也没有分割那么清晰,但都属于action范围:

1.awk的if-else

语法:

{if(condition){statement;…}}:条件满足就执行statement
{if(condition){statement1;…}{else statement2}}:条件满足执行statement1,不满足执行statement2
{if(condition1){statement1}else if(condition2){statement2}else{statement3}}:条件1满足执行statement2,不满足条件1但满足条件2执行statement2,所用条件都不满足就执行statement3

示例:

awk -F: '{if($3>=1000)print $1,$3}' /etc/passwd awk -F: '{if($NF=="/bin/bash") print $1}' /etc/passwd awk '{if(NF>5) print $0}' /etc/fstab awk -F: '{if($3>=1000) {printf "Common user: %s\n",$1}else{printf "root or Sysuser: %s\n",$1}}' /etc/passwd awk -F: '{if($3>=1000) printf "Common user: %s\n",$1;else printf "root or Sysuser: %s\n",$1}' /etc/passwd df -h|awk -F% '/^\/dev/{print $1}'|awk '$NF>=80{print $1,$5}‘ awk 'BEGIN{ test=100;if(test>90){print "very good"}else if(test>60){ print "good"}else{print "no pass"}}' 2.awk的while和do-while

语法:

while(condition){statement;…}:条件为“真”时,进入循环;条件为“假”时, 退出循环
do {statement;…}while(condition):无论真假,至少执行一次循环体。当条件为“真”时,退出循环;条件为“假”时,继续循环

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13429.html