Chinaunix首页 | 论坛 | 博客
  • 博客访问: 526924
  • 博文数量: 93
  • 博客积分: 2479
  • 博客等级: 大尉
  • 技术积分: 1008
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 11:59
文章分类

全部博文(93)

文章存档

2012年(2)

2011年(41)

2010年(24)

2009年(21)

2008年(5)

分类: LINUX

2009-01-15 23:52:22

Awk 的应用

 

 

一、Awk是一个工具,是一种自解释编程语言,从文件或字符串中按照一定规则浏览和抽取信息。

它有三种调用awk方式

1)         awk [-F filed-spearator] ‘command’ input-files

2)         awk脚本

所有awk命令插入一个文件,并使awk程序执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。

3)         awk 命令插入一个单独文件

awk –f awk-script-file input-files

awk脚本是由各种操作和模式组成的。

l          模式部分决定动作语句何时触发及触发事件。(BEGIN, END

l          动作对数据进行处理,放大大括号{}内指明。(print

l          分割符、域和记录

awk执行时,其浏览域标记为$1,$2……$n.这种方法称为域标识。$0为所有域,即一整行

-注意执行时不要混淆符号$shell提示符$,它们是不同的.

它的格式:

 

awk –F ‘’  filename

awk中的特殊字符:

     匹配操作符:~ , !~------指不匹配

     不加参数-F,默认分隔符是空格,如有其它的分隔符:-F “[:/]”

     &&---------表示要同时满足前后两个条件

     ||------------表示满足一个条件即可执行,相当于或

     ----------表示取反,相当于非

awk 的内部命令:NR(显示每行的行号)NF(统计每行分隔符分命的段数).

 

二、Awk的实例

1.      打印所有输入行(脚本)

#!/bin/awk –f

BEGIN{

          FS= “:”    #如果对分隔符没有特殊要求,可省略

}

{

          print $0

}

2.      打印输入文件的第八行(脚本)

#!/bin/awk –f

{

          If (NR==8)

               print $0}

3.      awk命令打印文件所有行的第一个字段

awk –F:  ‘{print $1}’ /etc/passwd (passwd文件为列)

4.      打印输入行总数

awk –F: ‘END{print NR}’

5.      打印每行字段数

awk –F: ‘{print NF}’  /etc/passwd

6.      打印最后一行的最后一个字段的值

#!/bin/awk  -f

BEGIN{

          FS= “:”

}’

END{

     print NF

}

 

7.      打印字段数大于4个的行

Awk –F: ‘NF>4 {print $0}’ /etc/passwd

8.      打印文件所有字段的总数

#!/bin/awk

BEGIN{

     FS = “:”

     num=0

}

{

          num=num+NF

}

END{

          print num

}

9.      打印uid30-40范围内的用户名

awk –F: ‘$3>30 && $3<40 {print $1}’

10.   倒序排列文件的所有字段

#!/bin/awk –f

BEGIN{

          FS= “:”

}

{

     for (i=NF; i>0; i--)

{

     print (“%s\t”,$i)

}

     printf (“\n”)

}

11.   打印526

Awk –F: ‘NR>5 && NR<26 {print $0}’ /etc/inittab

12.   在文件顶部加上标题“document”

13.   隔行删除

14.   打印字段数大于5个的行总数

15.   每行抽取第一个单词(脚本)

16.   打印每行的第一个和第三个单词(脚本)

 

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