背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  
阅读内容

Linux 下的编程语言awk 学习

[日期:2008-04-26] 来源:Linux公社  作者:Linux整理 [字体: ]


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 



相关资讯       linux编程 
本文评论       全部评论
发表评论
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款


点评: 字数
姓名:

L
I
N
U
X


GOOGLE搜索
Google