Shell笔记第七天 awk第一篇

【简介】

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 

 


你可能感兴趣的:(Shell笔记第七天 awk第一篇)