友情提示:本站最近进行了改版升级,如出现显示异常,请刷新页面或清除一下缓存!

  一个典型的awk 程序指令是由模式(Pattern)和大括号括起来的操作(Action)组合而成的,具体格式如下:

Pattern { Action }

  对于awk 读取的每条记录,如果一个记录与指定模式(Pattern)相匹配,或包含与该模式匹配的字段,那么执行相应的操作(Action)。

  模式和操作可以任意省略其中的一个,如果省略模式,则操作会被应用到每条输入记录;如果省略操作,则默认操作为将匹配的记录打印到标准输出上。假设有一个名为 visitor 的文本文件,记录了某段时间访问Coding Ants的人,具体如下,中间用tab进行分割。

guangdong	121.8.171.*	15:18:23	www.google.com.hk
guangdong	183.32.97.*	15:11:23	www.google.com
tianjing	111.166.108.*	15:10:22	www.baidu.com
guangdong	113.65.141.*	14:35:27	www.baidu.com
shanghai	123.126.50.*	14:18:23	www.google.com.hk
shanghai	117.136.0.*	14:17:23	www.google.com

  visitor文件共有6行,每行由tab分割为4个部分,对awk 来说,这就是6条记录,每条记录包含4个字段!如果我们想查看来自广东的访问者,则可以执行下面的命令:

CodingAnts@ubuntu:~/awk$ cat visitor | awk '/guangdong/ {print $0}'
guangdong	121.8.171.*	15:18:23	www.google.com.hk
guangdong	183.32.97.*	15:11:23	www.google.com
guangdong	113.65.141.*	14:35:27	www.baidu.com

  上面蓝色部分的/guangdong/即为模式(Pattern),红色部分的print $0 为操作(Action)。上面的awk指令可以这样理解:awk读取visitor中的每条输入作为记录,然后将模式与记录进行匹配(查找记录中是否包含 guangdong 这个词),如果匹配,则执行操作(打印整条记录到标准输出)。

  接下来,我们分别省略模式和操作,看看输出的结果有什么差异。

CodingAnts@ubuntu:~/awk$ cat visitor | awk '/guangdong/'
guangdong	121.8.171.*	15:18:23	www.google.com.hk
guangdong	183.32.97.*	15:11:23	www.google.com
guangdong	113.65.141.*	14:35:27	www.baidu.com

  上面是省略操作后的输出,可以看出默认的操作就是 print $0,也就是打印整条记录!

CodingAnts@ubuntu:~/awk$ cat visitor | awk '{print $1,$4}'
guangdong www.google.com.hk
guangdong www.google.com
tianjing www.baidu.com
guangdong www.baidu.com
shanghai www.google.com.hk
shanghai www.google.com

  省略模式后,可以看出awk对于每条记录都执行了对应的操作(打印第一个和第四个字段)!

  总结下就是:模式(Pattern)用于筛选记录,操作(Action)用于处理字段!

转载请注明:Coding Ants » awk的程序指令模型

相关文章

我来说说

(便于我们更好的交流)

没有交流就没有进步,在此输入您对本文的看法!
取消