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短格式。
阅读(1214) | 评论(0) | 转发(0) |