六、awk的输出模式
1、awk 'program' input-file1 input-file2 ...
其中的program为:
pattern { action }
pattern { action }
......
2、常见的模式类型:
Regexp: 正则表达式,格式为/regular expression/
expresssion: 关系表达式,其值非0或为非空字符时满足条件,可以是字符串或数字的比较
Ranges: 指定的匹配范围,格式为pat1,pat2
BEGIN/END:特殊模式,仅在awk命令执行前运行一次或结束前运行一次
BEGIN模式是 在真正处理之前做些准备工作的功能,END模式是 在运行之后输出相关信息。
Empty(空模式):匹配任意输入行;
3、常见的语句动作
Expressions : 表达式
Control statements: 控制语句
Compound statements : 组合语句
Input statements : 输入语句
Output statements : 输出语句
七、控制语句
1、if-else
语法:if (condition) {then-body} else {[ else-body ]}
1
# awk -F: '{if ($1=="root") printf "%-15s: %s\n", $1,"Admin"; else printf "%-15s: %s\n", $1, "Common User"}' /etc/passwd
2、while
此while语句在awk中的作用体现是要么做成的循环体,要么在某个片上的循环
语法: while (condition){statement1; statment2; ...}
1
# awk -F: '{i=1;while (i<=3) {print $i;i++}}' /etc/passwd
3、do-while
与while语句不同之处在:不管条件真假先执行一次循环体,再执行控制语句
语法: do {statement1, statement2, ...} while (condition)
1
# awk -F: '{i=1;do {print $i;i++}while(i<=3)}' /etc/passwd
4、for
语法: for ( variable assignment; condition; iteration process) { statement1, statement2, ...}
1
# awk -F: '{for(i=1;i<=NF;i++) { if (length($i)>=4) {print $i}}}' /etc/passwd
for循环还可以用来遍历数组元素
语法: for (i in array) {statement1, statement2, ...}
1
# awk -F: '$NF!~/^$/{BASH[$NF]++}END{for(A in BASH){printf "%15s:%i\n",A,BASH[A]}}' /etc/passwd
5、case
语法:switch (expression) { case VALUE or /REGEXP/: statement1, statement2,... default: statement1, ...}
6、break 和 continue
常用于循环或case语句中
7、 next
提前结束对本行文本的处理,并接着处理下一行
1
# awk -F: '{if($3%2==0) next;print $1,$3}' /etc/passwd