awk基本语法几则

1、循环语句:

awk中的循环语句同样借鉴于C语言,支持whiledo/whileforbreakcontinue,这些关键字的语义和C语言中的语义完全相同。

2、流程控制语句:

next语句是从文件中读取下一行,然后从头开始执行awk脚本。

exit语句用于结束awk程序。它终止对记录的处理。但是不会略过END模块,如果exit()语句被赋值0--255之间的参数,如exit(1),这个参数就被打印到命令行,以判断退出成功还是失败。

3、重定向

/> awk '$4 >= 70 {print $1,$2 > "passing_file"}' filename  #注意这里的文件名需要用双引号括起来。

4、输入重定向

awk中对于输入重定向是通过getline函数来完成的。getline函数的作用是从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得 输入。他负责从输入获得下一行的内容,并给NFNRFNR等内建变量赋值。如果得到一个记录,getline就返回1,如果达到文件末尾就返回0。如 果出现错误,如打开文件失败,就返回-1

/> awk 'BEGIN { "date" | getline d; print d}'

Tue Nov 15 15:31:42 CST 2011

上例中的BEGIN动作模块中,先执行shell命令date,并通过管道输出给getline,然后再把输出赋值给自定义变量d并打印输出它。

/> awk 'BEGIN { "date" | getline d; split(d,mon); print mon[2]}'

Nov

上例中date命令通过管道输出给getline并赋值给d变量,再通过内置函数splitd拆分为mon数组,最后printmon数组的第二个元素。

5、关闭管道

由于awk中同时打开的管道只有一个,那么在打开下一个管道之前必须关闭它,管道符号右边可以通过可以通过双引号关闭管道。如果不关闭,它将始终保持打开状态,直到awk退出。

/> awk {print $1,$2,$3 | "sort -4 +1 -2 +0 -1"} END {close("sort -4 +1 -2 +0 -1") } filename

上例中END模块中的close显示关闭了sort的管道,需要注意的是close中关闭的命令必须和当初打开时的完全匹配,否则END模块产生的输出会和以前的输出一起被sort分类。

6、初始化变量

awk在动作部分还提供了BEGIN块和END块。其中BEGIN动作块在awk处理任何输入文件行之前执行。事实上,BEGIN块可以在没有任何输入 文件的条件下测试。因为在BEGIN块执行完毕以前awk将不读取任何输入文件。BEGIN块通常被用来改变内建变量的值,如OFSRSFS等。也可 以用于初始化自定义变量值,或打印输出标题。

#从输入文件中找到以north开头的记录count就加一,最后在END块中输出该变量。

/> awk '/^north/{count++}; END{print count}' testfile

原文:

本篇文章写的非常好,更多参考

http://www.cnblogs.com/mchina/archive/2012/06/30/2571317.html

posted @ 2012-09-23 17:44  浪里飞  阅读(1940)  评论(1编辑  收藏  举报