Chinaunix首页 | 论坛 | 博客
  • 博客访问: 430134
  • 博文数量: 61
  • 博客积分: 2286
  • 博客等级: 大尉
  • 技术积分: 550
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-27 22:04
文章分类

全部博文(61)

文章存档

2018年(2)

2017年(1)

2013年(2)

2012年(8)

2011年(6)

2010年(8)

2009年(13)

2008年(21)

我的朋友

分类:

2008-11-10 16:56:00

a:awk内置变量 

变量名 含义 

ARGC 命令行参数个数 
ARGV 命令行参数数组 
FILENAME string=当前输入的文件名 
FNR 在当前文件中当前记录数(对输入文件起始为1) 
FS 输入字段分隔符 
NF 当前记录的字段数 
NR 当前记录数(为全部输入文件) 
OFMT 数值的输出格式(默认为%.6g) 
OFS 输出字段的分隔符(默认为空格) 
ORS 输出记录分隔符(默认为换行符) 
RS 输入记录分隔符(默认为换行符) 


awk允许的测试: 

b:操作符 含义 

x==y x等于y? 
x!=y x不等于y? 
x>y x大于y? 
x>=y x大于或等于y? 
xx<=y x小于或等于y? 
x~re x匹配正则表达式re? 
x!~re x不匹配正则表达式re? 

awk的操作符(按优先级升序排列) 

= 、+=、 -=、 *= 、/= 、 %= 
|| 
&& 
> >= < <= == != ~ !~ 
xy (字符串连结,'x''y'变成"xy") 
+ - 
* / % 
++ -- 

c:awk的函数 

int(x) 对x取整 
rand 取 0到1之间的随机数 
srand(x) 设置x为rand的新输入值 
cos(x) 给出x的余弦值 
sin(x) 给出x的正弦值 
atan2(x,y) 给出y/x的正切值 
exp(x) 给出e的x次幂 
log(x) 给出x的常用对数值(基为e) 
sqrt(x) 给出x的正平方根值 
exit(x) 结束awk程序,若有x值,则返回x,否则返回0. 
index(s,t) 返回t在s中的第一个开始位置,如t不是s的子串,则返回0] 
length(x) 求x的长度(字符个数) 
substr(s,x,y) 在字符串s中取得从x个字符开始的长度为y的子字符串. 
 
d:awk内置字符串函数
gsub(r,s)       在整个$0中用s替代r
gsub(r,s,t)     在整个t中用s替代r
index(s,t)      返回s中字符串t的第一位置
length(s)       返回s长度
match(s,r)      测试s是否包含匹配r的字符串
split(s,a,fs)   在fs上将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s)        用$0中最左边最长的子串代替s
substr(s,p)     返回字符串s中从p开始的后缀部分
substr(s,p,n)   返回字符串s中从p开始长度为n的后缀部分
依次举例:
[root@codfei5 Bash]# cat test.txt
M.Tansley       05/99   48311   Green   8       40      44
J.Lulu          06/99   48317   green   9       24      26
P.Bunny         02/99   48      Yellow  12      35      28
J.Troll         07/99   4842    Brown-3 12      26      26
L.Tansley       05/99   4712    Brown-2 12      30      28
[root@codfei5 Bash]# awk 'gsub(4842,4899){print $0}' test.txt
J.Troll         07/99   4899    Brown-3 12      26      26
[root@codfei5 Bash]# awk 'BEGIN{print index("Bunny","ny")}'
4
[root@codfei5 Bash]# awk '$1=="J.Troll"{print length($1)}' test.txt
7
[root@codfei5 Bash]# awk 'BEGIN {print length("codfei is handsome")}'
18
[root@codfei5 Bash]# awk 'BEGIN {print match("ANCD",/C/)}'
3
[root@codfei5 Bash]# awk 'BEGIN {print split("123-456-789--",array,"-")}'
5
[root@codfei5 Bash]# cat test.txt|awk 'sub(26,29)'
J.Lulu          06/99   48317   green   9       24      29
J.Troll         07/99   4842    Brown-3 12      29      26
#匹配每行第一个26
[root@codfei5 Bash]# awk '$1=="L.Tansley" {print substr($1,1,5)}' test.txt
L.Tan
#上面例子中,指定在域1的第一个字符开始,返回其前面5个字符。
[root@codfei5 Bash]# awk '$1=="L.Tansley" {print substr($1,3,99)}' test.txt
Tansley
#如果给定长度值远大于字符串长度,awk将从起始位置返回所有字符,要抽取 L.Tansley
#的姓,只需从第3个字符开始返回长度为7。可以输入长度99,awk返回结果相同。
[root@codfei5 Bash]# awk '{print substr($1,3)}' test.txt
Tansley
Lulu
Bunny
Troll
Tansley
[root@codfei5 Bash]# str="say hello to you "
[root@codfei5 Bash]# echo $str| awk '{print substr($str,1,3)}'
say
[root@codfei5 Bash]# echo $str| awk '{print substr($str,5,5)}'
hello
[root@codfei5 Bash]# echo $str| awk '{print substr($str,11,2)}'
to
[root@codfei5 Bash]# echo $str| awk '{print substr($str,14,3)}'
you
[root@codfei5 Bash]# echo $str| awk '{print substr($str,14)}'
you
[root@codfei5 Bash]# echo $str| awk '{print substr($str,11)}'
to you
[root@codfei5 Bash]# echo $str| awk '{print substr($str,5)}'
hello to you

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

chinaunix网友2011-08-21 12:42:56

哥,帮大忙了