文本数据处理之AWK 图解(2)

六、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模式是 在运行之后输出相关信息。

文本数据处理之AWK 图解

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

 

文本数据处理之AWK 图解

2、while

此while语句在awk中的作用体现是要么做成的循环体,要么在某个片上的循环

语法: while (condition){statement1; statment2; ...}

1

 

# awk -F: '{i=1;while (i<=3) {print $i;i++}}' /etc/passwd

 

文本数据处理之AWK 图解

3、do-while

与while语句不同之处在:不管条件真假先执行一次循环体,再执行控制语句

语法: do {statement1, statement2, ...} while (condition)

1

 

# awk -F: '{i=1;do {print $i;i++}while(i<=3)}' /etc/passwd

 

文本数据处理之AWK 图解

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

 

文本数据处理之AWK 图解

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

 

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

转载注明出处:http://www.heiqu.com/78b81a971967c2d003553b3d41e6bac7.html