Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103729469
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-04-25 14:50:19

作者: mxjqcg  出自:
awk 是linux下的一个非常有用的用于处理文件和字符串的工具,他也提供内置函数,所以他也算是一门编程语言了。起类似作用的工具还有sed,grep等。这几天我会一直学习awk。

这里我只讲awk的命令,不会涉及awk的脚本,其实两者道理是一样的。

(1) awk 处理文件:
命令方式 awk -f 域分隔符 '模式 {动作}' 文件名

每次读取文件的一行,通过域分隔符将每行分隔成若干个域 ,分别用$1,$2, $3,...$9,&(10)...表示第一个域,第二个域。。。。, $0表示一行的所有域,默认是用空格作为域分隔符,这也是一般的方法,所以-f 域分隔符一般都不用。

awk与sed,grep一样,是将文件内容读取到缓存区中,对其进行操作,再将结果输出到屏幕上,不会对源文件进行修改,如果要修改源文件,使用如下形式

awk comand filename | tee filename

模式由一些选择语句(里面含有正则表达式进行特定行的匹配)组成,他表示什么时候激发动作的产生;模式有2个特殊的字段,BEGIN与END。BEGIN 表示报头,在浏览行之前执行,END表示报尾,在所有的浏览后执行。默认的模式是打印所有行。

动作一般是{print $1....} ,就是将每一行的某些域打印出来。

下面举一些例子讲述:
$ cat file
1 nm hello 2000
2 jack good 2001
3 eric happy 2002

$ awk '{print &0}' file
结果:
1 nm hello 2000
2 jack good 2001
3 eric happy 2002

$ awk '{print $1,$3,$4}' file
结果:
1 hello 2000
2 good 2001
3 happy 2002
$ awk 'BEGIN {print "begin test"}{print &0}END{print "end test"}' file
结果:
begin test
1 nm hello 2000
2 jack good 2001
3 eric happy 2002
end test
$ awk '{if($2=="nm") {print $0}}' file
$ awk '$2=="nm" {print $0}' file # 这两条命令结果一样,建议用第二条语句
1 nm hello 2000
$ awk '$3 ~ /o/ {print $0}' file
结果:
1 nm hello 2000
2 jack good 2001
$awk '$3 ~ /^h/ ' file
结果:
1 nm hello 2000
3 eric happy 2002
阅读(538) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~