Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96579
  • 博文数量: 46
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 505
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-22 19:56
文章分类
文章存档

2008年(46)

我的朋友

分类: LINUX

2008-04-23 11:56:28

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
 
 
 
 
 
 
 
 
 
 
 
    
      
阅读(479) | 评论(0) | 转发(0) |
0

上一篇:linux下的seq命令

下一篇:linux下的awk(二)

给主人留下些什么吧!~~