分类: LINUX
2010-03-24 07:30:51
awk 的调用有三种方式
1) awk [option] ‘awk_script’ input_file1 [inputfile2……]
awk 的常用选项有
1.-F fs : 输入记录的字段分隔符
2.-f filename : 从文件filename中读取awk_script
3. –v var=value : 为awk_script设置变量
2) 把awk_script 放入脚本文件并以#!/bin/awk –f 作为首行,给予脚本执行权限,然后在shell下调用
3) 将所有的awk_script 插入一个单独脚本文件同,然后调用 awk-f awk的脚本文件 input_file(s)
======================================================================
现主要讨论第一种调用awk 的方式
Awk_script 的组成
Awk_script 由可以由一个awk_cmd或多条awk-cmd组成, 两条命令之间一般以NEWLINE分隔
awk_cmd 由两部分组成:awk_pattern {action}
awk_cmd 命令的一般形式
awk ‘ BEGIN { actions}
awk_pattern {actions}
……………………..
……………………..
END { actions}’ filename
其中BEGIN {actions} 和END {actions} 是可选的
======================================================================
Awk_pattern 有以下几种类型
1)正则表达式 awk_pattern : /regexp/ (如是正则表达式则用 / / )
Awk中常用的正则表达式有:
\ ^ $ . [] | () * // 通用的regexp 元字符
+ :匹配其前的单个字符以次以上,是awk 自有的,不适用于grep或sed
? :匹配其前的单个字符1次或0次,是awk 自有的,不适用gf p或sed
如下面例子:
2)布尔表达式
****表达式中可以用 变量和/regexp/
****关系操作符:< > <= >= == !=
*****匹配操作符: value ~ /regexp/ 如果value 匹配/regexp/,则返回真
Value!~ /regexp/ 如果value不匹配/regexp/,则返回真
*****&&和|| 可以连接两个/regexp/ 或者布尔表达式构成混合表达式。!可用在布尔表达式或者/regexp/之前
Actions
Actions 由一条或多条语句或者命令组组成,语句、命令之间用分号(;)分隔。
Actions中还可以使用流程控制结构的语句
1) awk的命令
print 参数列表:print 可以打印字符(加双引号)、变量和表达式。是awk 最基本的命令。参数列表要用逗号(,)如果参数间用空格分开,打印出时参数值之间不会有空格
还有printf命令
条件表达式:A?B:C (A 为布尔表达式,B 和C可以是表达式或者直接值)
当布尔表达式A的值为真时,整个表达式的值为B,A的值为假时,整个表达式的值为C
==========================================================================================
1) 流程控制结构(基本上使用C语言的语法)
****** if (condition) {then-body} [ else {else-body}]
****** while (condition) {body}
****** do {dody} while {condition}
****** for (initialization; condition; increment) {body} (与C语言FOR 结构语法相同)
****** break 跳出包含它的for while do-while循环
******continue 跳出 for while do-while 循环的body的剩余部分,而立刻执行下次循环的执行
Awk内部变量
FS 输入记录的字段分隔符(默认是空格和制表符)
OFS 输出记录的字段分隔符(默认是空格)
OFMT 数字的输出格式(默认是%
RS 输入记录间的分隔符(默认是NEWLINE)
ORS 输出记录间的分隔符(默认是NEWLINE)
ARGV 命令行参数数组
ENVIRON 存储系统当前环境变量值的数组,它的每一个成员的索引就是一个环境变量名,而对应的值就是相应环境变量的值,可以通过给ENVIRON数组的成员赋值而以身改变环境变量的值,但是新值只能在awk_script 内有效