Chinaunix首页 | 论坛 | 博客
  • 博客访问: 254243
  • 博文数量: 78
  • 博客积分: 1465
  • 博客等级: 上尉
  • 技术积分: 972
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-28 13:46
文章分类

全部博文(78)

文章存档

2012年(1)

2011年(9)

2010年(68)

我的朋友

分类:

2010-01-11 01:08:55


1: awk 语法gawk 'pattern { action }' textfile
咋一看,和sed语法 sed 'pattern action' textfile类似。
这正是sed/awk容易混淆的原因之一,sed/awk语法基本类似,细微的差别就是awk的action,需要用大括号括起来。
awk的执行流程也是,输入文本,匹配pattern,执行action,接着匹配pattern,接着执行action。注意:awk没有模式空间一说。
它的action也和sed完全不一样。

2:pattern
在awk眼中,一个文本过来,被它看成了一个表格。
详细的说,一个文本过来,awk不管三七二十一先用RS字符串把它切成一行一行的,然后对每一行用FS切成一个一个的表项。
所以,awk里面文本有两个基本单位,一个是行,一个是表项。(回忆一下,sed文本只有一个基本单位,行)。
awk里面对每行编号为,1,2,3,4,5,... NR
对每行里面每个表项的编号是 $1 $2 $3 ... $NF,对整行特殊编号为$0
a. 由于NR NF 为数字,并且$n也可以为数字,那么可以进行数字比较,找出需要的pattern。
  比如,第三项的值为日期号,判断日期大于20 可以写做 $3 > 20
  数字比较有如下6种方法
  < <=
  > >=
  == !=
b. 由于$n也可以是字符串,那么也可以采取字符串匹配的方法构造pattern
  比如,含有字符串“www”的行 模式可以写做 $0 ~ /www/
  比如,第五项不包含字符串“com”,模式可以写做 $5 !~ /com/
c. 模式可以为模式范围
  A pattern range is two patterns separated by a comma.
  The action is performed for each input line between the occurrence of the first and second pattern.
  /regular expression 1/, /regular expression 2/ { print $0 }
d. 模式组合
  Patterns can be combined to provide more powerful and complex matching.
  The following symbols are used to combine patterns.
  || logical or, either pattern can match
  && logical and, both patterns must match
  ! logical not, patterns not matching

3: action
action就是对选定对象进行操作。
主要的动作有如下三类。
动作一:print 和 printf, printf基本上和c语言类似。
动作二:内置函数。最常用的一个是gsub/sub
加上C语言的for, while, do-while, if-else流程控制,
再加上awk特色的变量,数组定义和使用,构成了awk的action。

4: BEGIN/END
BEGIN{} 开始之前设置一些FS,RS等等动作。
END{} 结束的时候执行一些action。

awk大体结构就是这样,然后对awk数组需要特别理解,了解awk内置函数的用法,反复练习,应该可以对awk应用自如了。
阅读(904) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~