Chinaunix首页 | 论坛 | 博客
  • 博客访问: 195374
  • 博文数量: 49
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 492
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-08 16:23
文章分类

全部博文(49)

文章存档

2012年(8)

2011年(34)

2008年(7)

分类:

2011-05-08 17:05:28

awk编程的两本经典书籍
The AWK Programming Language()
Effective awk Programming

[root@YW ~]# awk '{if(match($1,/^no/)){print substr($1,RSTART,RLENGTH)}}' datafile 
no
no
no
如果match函数在第1个字段中找到了正则表达式/^no/,就返回最左端那个字符的索引位置。match函数将内置变量RSTART设置为索引位置,将变量RLENGTH设为匹配到的子串的长度。substr函数返回第1个字段中从位置RSTART开始、长度为RLENGTH个字符的子串。

[root@YW ~]# awk '{line=sprintf("%10.2f%5s\n",$7,$2); print line}' datafile
      3.00   NW

      5.00   WE

      2.00   SW

      4.00   SO

      4.00   SE

      5.00   EA

      3.00   NE

      5.00   NO

      5.00   CT

sprintf函数以sprintf函数的格式规范设置第7、2个字段($7、$2)的格式,接着返回经过格式化的字符串,并将其赋值给用户自定义的变量line,然后打印变量line的内容出来。

toupper函数返回的是一个将所有小写字母均已转换成大写字母的字符串,非字母字符不发生变化;
格式:toupper(字符串)
tolower函数返回的是将所有大写字母转换成小写字母的字符串;
格式:tolower(字符串)
注意:字符串必须加双引号,并且仅适用于gawk。

gawk提供了两个函数来获取时间和格式化时间戳:
systime函数将返回自1970年1月1日以来经历过的时间(按秒计算的);格式:systime()
strftime函数使用C库中的strftime函数对时间进行格式化,格式化形式可以为%T%D等(参考表6-14);格式:systime([format specification][,timestamp])


ARGC是参数的个数
ARGV是包含实际参数的数组

[root@YW ~]# awk 'BEGIN{name=ARGV[1];delete ARGV[1]};\
> $0 ~ name {print $3,$4}' "Derek" datafile
Derek Johnson
把Derek赋给变量name后,awk就把ARGV[1]删除了,进入模式操作块时,awk没有尝试将Derek作为输入文件打开,而是打开了文件datafile。

[root@YW fuhao]# awk 'BEGIN{ printf "Who are you looking for ?" ;getline name < "/dev/tty";print name}'
Who are you looking for ?root
root
从终端/dev/tty读取输入,保存到数据name中并打印出来。

awk有多重命令行选项,而gawk有两种命令行选项格式:以双中划线(--)和单词开头的GNU长格式,以及传统的以一个中划线和字母组成的POSIX短格式。

阅读(1222) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~