查看文章
 
awk的常识[转]
2008年07月23日 星期三 18:23

1、awk程序体的一般格式为:
   awk ' #注意单引号前有空格
   BEGIN{}         #程序开始前的预处理部分可以对一些变量进行初始化,未读数据前执行
   {}              #对每条记录循环进行操作的主体部分
   END{}' <文件名> #程序的结束部分,可以对处理的结果作一些善后。注意单引号后有空格

2、awk的程序风格完全可以按照c语言的风格书写。例如:
awk '{
if ($1 == "FIND")
regex = $2;
else
{
where = match($0, regex);
if (where)
   printf("Match of %s found at %d in %s",regex,where,$0);
}
}' <文件名>
当然,awk支持一些更简洁的书写风格,例如上面的printf语句可以写成:
print "Match of", regex, "found at", where, "in", $0

3、记录和字段的表示法。
   整条记录表示为$0,第n个字段表示为$n

4、常用内在变量。
   NR 是记录号,即当前正在处理第几条记录。
   NF 是当前记录共有多少个字段,
这样,每条记录最后一个字段可表示为$NF,倒数第2个字段可表示为$(NF-1)
   FS 是一个说明各个字段如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,类似于cut中的-d功能.
   RS 是一个说明各个记录如何分隔开的预定义变量.
这经常用于BEGIN语句体中预定义,例如,RS=":" 表示各条记录是用":"分开的.
   OFS 定义各字段在输出时如何分隔开.
   ORS 定义各条记录在输出时如何分隔开.

5、输出重定向。
   例如:
awk '{ print $2 > "phone-list"
print $1 > "name-list" }' BBS-list
双引号内为文件名,不加双引号会被当作变量。

6、在awk中利用管道向shell命令传递参数。
   例如:
awk '{ print $1 > "names.unsorted"
print $1 | "sort -r > names.sorted" }' BBS-list

7、awk的特有函数和其它功能请参阅awk手册。

另外,nawk比awk具有更多的功能,它能够把shell中的变量传递给nawk。
nawk格式:
Usage: nawk [-f programfile | 'program'] [-Ffieldstep] [-v var=value] [files]
例如,可以这样向nawk传递shell变量:
nawk -v dr=$HOME -v pk=`hostname` 'BEGIN{print dr pk}'


类别:Linux||添加到搜藏 |分享到i贴吧|浏览(72)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu