免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1302 | 回复: 0
打印 上一主题 下一主题

[新手入门] awk(1)--入门 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-28 10:50 |只看该作者 |倒序浏览
1.1 awk简介
   awk是一个程式语言,对于资料的处理具有很强的功能。对于文件里的资料做修改、比对、抽取等的处理,awk 能够以很短的程式轻易地完成。
   awk 的主要功能是针对文件的每一行(line)搜寻指定的 patterns。当一行里有符合指定的 patterns,awk 就会在此一行执行被指定的 actions。 awk 依此方式处理输入文件的每一行直到输入文件结束。
   
   awk 程式是由很多的 pattern 与 action 所组成,action 写在大括号 { } 里面,一个pattern:面就跟着一个action。整个 awk 程式会像下面的样子:   
pattern {action}  
pattern {action}   
  在 awk 程式里面的规则,pattern 或 action 能够被省略,但是两个不能同时被省略。如果 pattern 被省略,对于输入文件里面的每一行,action 都会被执行。如果 action 被省略,内定的 action 则会印出所有符合 pattern 的输入行。   
1.2 如何执行awk程式   
    基本上,有2个方法可以执行awk程式。   
    (1)如果 awk 程式很短,则 awk 可以直接写在 command line,如下所示:   
         awk 'program' input-file1 input-file2 ... (其中 program 包括一些 pattern 和 action)
    (2)如果 awk 程式较长,较为方便的做法是将 awk 程式存在一个文件,即 patterns 与 actions 写在文件名为 program-file 的文件里面,执行awk 的格式如下所示:   
         awk -f program-file input-file1 input-file2 ...   
     awk 程式的文件不止一个时,执行awk 的格式如下所示:   
           awk -f program-file1 -f program-file2 ... input-file1  input-file2 ...   
1.3 一个简单的例子   
现在举一个简单的例子,因为 awk 程式很短,所以将 awk 程式直接写在 command line。   
    awk '/foo/ {print $0}' BBS-list   
    实际的 awk 程式为 /foo/ {print $0}。/foo/ 为 pattern,意思为搜寻输入文件里的每一行是否含有子字串 'foo',如果含有 'foo' 则执行 action; action 为 print $0,是将现在这一行的内容印出。BBS-list 是输入的文件。   
1.4 一个较复杂的例子   
     awk '$1 == "Feb" {sum=$2+$3} END {print sum}' shipped   
     现在这个例子会将输入文件 'shipped' 的第一个栏位与 "Feb" 做比较,如果相等,则其对应的第2栏位与第3栏位的值会被加到变数 sum。 对于输入文件的每一行重复上述的动作,直到输入文件的每一行都被处理过为止。最后将 sum 的值印出。END {print sum} 的意思为在所有的输入读完之后,执行一次 print sum 的动作,也就是把 sum 的值印出(只是最后一次的结果)。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/34065/showart_266602.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP