【简介】
awk以发展这种语言的人A h o . We n i n b e rg e r和K e r n i g h a m命名,是一种自解释的编程语言。
【主要功能】
在文件或字符串中基于指定规则浏览和抽取信息。
【基本格式】
awk [-F field-separator] 'command' input-fiie(s)
【域标志】
awk 执行时,浏览的域被标记为$1,$2,$3.....$n,$0代表所有的域。
【注意的语法】
动作语句需要用花括号括起来:awk '{print $0}' grade.txt
整个command要用单引号引起来: awk '{print $0}'grade.txt
【与正则表达式】
awk中的正则表达式用斜线括起来
例如:awk '{if($4 ~/Brown/) print $0}' grade.txt
其中 ~ 表示匹配后面的正则表达式, !~表示不匹配后面的正则表达式
匹配记录时,如果没有特别声明,awk默认打印整条记录
【条件操作符】
操作符 描述
-----------------------------------
< 小于
<= 小于等于
== 等于
!= 不等于
>= 大于等于
!~ 不匹配正则表达式
~ 匹配正则表达式
【内置变量】
----------------------------------------------------------------------------------------------
ARGC 命令行参数个数
ARGV 命令行参数数组
ENVIRON 支持对联中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F 选项
NF 浏览记录的域个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
-----------------------------------------------------------------------------------------------
ENVIRON支持系统设置的环境变量,要访问单独的变量,使用实际变量名,例如
ENVIRION [" EDITOR"] = "Vi"
例子:
awk 'END {print NR}' grade.txt // 在输出的最后打印记录总数
awk '{print NF,NR, $0} END {print FILENAME}' grade.txt // 输出每行的域个数,记录编号,每条记录,并在最后输出文件名
awk '{if NR>0 && $4~/Brown/ print $0}' grade.txt // 记录条数至少为一条时,查询第四个域为Brown的记录,并打印这条记录
【NF的另一个作用】
NF 的另一个作用是将变量$PWD的返回值传入awk并显示其值,这里需要指定域分隔符
例1:
$pwd
/usr/local/etc
$echo $PWD | awk -F/ '{print $NF}'
etc
例2:
$echo “/usr/local/etc/rc.sybase” | awk -F/ '{printf $NF}'
rc.sybase