`
天梯梦
  • 浏览: 13635964 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

Shell编程:awk使用总结

 
阅读更多

1. 什么是awk

awk是Unix/Linux提供的样式扫描与处理工具,非常擅长处理结构化数据和生成表单。与sed 和grep 很相似,但功能却超过大于两者,由于awk具备各种脚本语言的特点,所以也可以把它看做一种脚本语言。本文介绍了awk的使用方法。

 

2. awk程序设计模型

awk程序由三部分组成,分别为:初始化(处理输入前做的准备,放在BEGIN块中),数据处理(处理输入数据),收尾处理(处理输入完成后要进行的处理,放到END块中)。其中,在“数据处理”过程中,指令被写成一系列模式/动作过程,模式是用于测试输入行的规则,以确定是否将应用于这些输入行。

 

3. awk调用方式

 

主要有三种调用方式,分别为:

 

(1) awk 命令行

你可以象使用普通UNIX 命令一样使用awk,在命令行中你也可以使用awk 程序设计语言,,这种方法一般只用于解决简单的问题。当然,你也可以在shell script 程序中引用awk 命令行甚至awk 程序脚本。

 

(2) 使用-f 选项调用awk 程序

awk 允许将一段awk 程序写入一个文本文件,然后在awk 命令行中用-f 选项调用并执行这段程序。

 

(3) 利用命令解释器调用awk 程序

利用UNIX 支持的命令解释器功能,我们可以将一段awk 程序写入文本文件,然后在它的第一行加上#!/bin/awk –f.

 

4. awk语法

 

与其它 UNIX 命令一样,awk 拥有自己的语法:

awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]

(1) -F re:允许awk 更改其字段分隔符。

(2) parameter:该参数帮助为不同的变量赋值。

(3) ‘prog’:awk 的程序语句段。这个语句段必须用单拓号:’和’括起,以防被shell 解释。这个程序语句段的标准形式为:’pattern {action}’

 

其中pattern 参数可以是egrep 正则表达式中的任何一个,它可以使用语法/re/再加上一些样式匹配技巧构成。与sed 类似,你也可以使用”,”分开两样式以选择某个范围。action 参数总是被大括号包围,它由一系列awk 语句组成,各语句之间用”;”分隔。awk 解释它们,并在pattern 给定的样式匹配的记录上执行其操作。你可以省略pattern 和action 之一,但不能两者同时省略,当省略pattern 时没有样式匹配,表示对所有行(记录)均执行操作,省略action时执行缺省的操作——在标准输出上显示。

 

(4) -f progfile:允许awk 调用并执行progfile 指定有程序文件。progfile 是一个文本文件,它必须符合awk 的语法。

(5) in_file:awk的输入文件,awk 允许对多个输入文件进行处理。值得注意的是awk 不修改输入文件。如果未指定输入文件,awk 将接受标准输入,并将结果显示在标准输出上。

 

5. awk脚本编写

 

5.1 awk的内置变量

awk中有两类内置的变量,一类用户可根据需要改变,主要有:FS:输入数据的字段分割符,RS:输入数据的记录分隔符,OFS:输输出数据的字段分割符,ORS:输出数据的记录分隔符;另一类是系统自动改变的,如:NF:当前记录的字段个数,NR:当前记录编号等。

举例说明:

awk -F”:” ‘{ print $1 ” ” $3 }’ /etc/passwd #打印passwd中的第1,3个字段

 

5.2 pattern/action模式

awk程序部分采用了pattern/action模式,即,针对匹配pattern的数据,使用action逻辑进行处理。

举例说明:

/^$/ {print “This is a blank line!”} #判断当前是不是空格
$5 ~ /MA/ {print $1 “,” $3} #判断第5个字段是不是含有“MA”
NF == 3 { print “this particular record has three fields: ” $0 }
 

5.3 BEGIN和 END

在 awk中两个特别的表达式,BEGIN和 END,这两者都可用于 pattern中,提供 BEGIN 和 END 的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在 BEGIN 之后列出的操作(在{}内)将在 awk 开始扫描输入之前执行,而 END 之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来初始化变量,使用END 来输出最终结果。

例:累计销售文件xs 中的销售金额(假设销售金额在记录的第三字段) :

$awk
>’BEGIN { FS=”:”;print “统计销售金额”;total=0}
>{print $3;total=total+$3;}
>END {printf “销售金额总计:%.2f”,total}’ sx
 

5.4 循环语句

Awk中的循环语句与C很相似,包括do…while,for,continue/break,while等

 

5.5 条件语句

Awk中的条件语句与C相似,但它有更好地支持。

举例说明:

if(x ~ /[yY](es) ?/) print x #如果x符合pattern “[yY](es) ?”,则打印出来
{ if ( $0 !~ /matchme/ ) { print $1 $3 $4}} #如果$0不包含“matchme”,则打印第1,3,4个字段

 

5.6 函数

(1) 数学函数

Awk中包含丰富的数学函数,包括:cos(x),sin(x),log(x),….

(2) 字符串函数

Awk中包含丰富的字符串函数,如:

length(x):求字符串x的长度

index(t,s):返回字符串s在字符串t中的位置

match(s,r):正则表达式r在字符串s中出现位置

(3) 自定义函数

awk允许自定义函数,语法是:function name(parameter-list) {statements;}

如:

Function insert(STRING, POS, INS) {

before_tmp = substr(STRING, 1, POS)

after_tmp = substr(STRING, POS + 1)

return before_tmp INS after_tmp

}

调用方法:print insert($1, 4, “XX”)

 

6. Awk与shell混用

因为 awk 可以作为一个 shell 命令使用, 因此 awk 能与 shell 批处理程序很好的融合在一起,这给实现 awk 与 shell 程序的混合编程提供了可能。实现混合编程的关键是 awk 与shell script之间的对话, 换言之, 就是awk与shell script之间的信息交流:awk从shell script中获取所需的信息(通常是变量的值)、在 awk 中执行 shell 命令行、shell script 将命令执行的结果送给 awk处理以及 shell script读取 awk的执行结果等等。

 

6.1. awk读取Shell script程序变量

在awk中我们可以通过“’$变量名’”的方式读取sell scrpit程序中的变量。

例如:读取shell scrpit程序中的变量name

 

下面给出两种方式:

第一种比较常用的方式:(双引号和单引号的意义需要明确)

#!/bin/sh
name=’John’
awk ‘{print $1,$2,”‘$name’”}’ myfile
 

————————————————-

 

第二种方式:

#!/bin/sh
name=’John’
awk ‘{print $1,$2,myname}’ myname=$name myfile
 

不过这种方式中,awk自定义变量myname不能在BEGIN中使用。

 

6.2. 将shell命令的执行结果送给awk处理

作为信息传送的一种方法,我们可以将一条shell命令的结果通过管道线(|)传递给awk处理:

例:示例awk处理shell命令的执行结果

$who -u | awk ‘{printf(“%s正在执行%s\n”,$2,$1)}’

 

6.3. shell script程序读awk的执行结果

shell中可以将awk执行结果赋值给shell变量。我们可以用变量名=`awk语句`的形式将awk执行的结果存放入一个shell script变量。当然也可以用管道线的方法将awk执行结果传递给shell script程序处理。

例如:找出myfile中带有fail字符串的行并统计行数,最后打印出格式为:there are (行数) lines

#!/bin/sh
temp=`awk ‘/fail/{print $0}’ myfile |wc -l`
echo “there are $temp lines
 

7. 参考资料

(1) http://fanqiang.chinaunix.net/program/other/2005-09-07/3621.shtml

(2) 《Unix awk使用手册》,作者:莫名 发表时间:2002/01/27 01:39pm

(3) 书籍《sed 与 awk》修订第三版

 

原创文章,转载请注明: 转载自董的博客

本文链接地址: http://dongxicheng.org/script/awk-usage/

 

分享到:
评论

相关推荐

    shell编程的awk使用(重点推介)

    shell编程,shell编程的awk使用(重点推介)

    shell编程教程.chm

    shell编程-shell编程-分支语句(1) shell编程-shell编程-分支语句(2) shell编程-shell编程-循环语句(1) shell编程-shell编程-循环语句(2) Linux的shell编程(一) Linux的shell编程(二) Linux的...

    linux shell 编程之 awk用法

    linux shell 编程之 awk详细用法

    shell编程-awk,sed,crontab

    shell编程包括awk,sed,crontab等linux 中的shell常用用法

    Shell编程高级进阶系列视频.zip

    19Shell编程之awk、sed演练 20Shell编程之awk、sed演练( 21Shell编程grep正则实战讲解 22Shell编程grep正则实战讲解 23Shell脚本综合案例讲解 24Shell脚本综合案例讲解 25Shell脚本编程综合实战一 26Shell脚本编程...

    shell、awk编程教材

    shell、awk编程教材

    UNIX命令及SHELL编程

    这是一套完整的Unix培训教材,包括Unix常用命令及SHELL编程基础与高级技巧,PDF格式,共30个文件。另有2个Word文档。包内文件清单如下: 01_Shell-文件安全与权限.PDF 02_Shell-使用find和xargs.PDF 03_Shell-...

    Shell编程下的AWK语法小结

    shel awk 学习:Shell编程下的AWK语法小结

    shell编程,sed,awk,grep等教程整理

    shell编程,sed,awk,grep等教程

    Linux主要shell命令、sed、awk使用详解

    1 Linux主要shell命令详解 2 Linux bash shell脚本语法入门 3 Shell基本命令 4 使用 sed 编辑器

    shell 编程指南pdf

    第四部分 基础shell编程 第16章 shell脚本介绍 151 16.1 使用shell脚本的原因 151 16.2 脚本内容 151 16.3 运行一段脚本 152 16.4 小结 153 第17章 条件测试 154 17.1 测试文件状态 154 17.2 测试时使用逻辑操作符 ...

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    Linux与unix shell编程指南.rar 第一部分 shell 第1章 文件安全与权限 1 第2章 使用find和xargs 14 第3章 后台执行命令 22 第4章 文件名置换 31 第5章 shell输入与输出 34 第6章 命令执行顺序 46 第二部分 文本过滤...

    awk与shell混合编程

    awk编程,都是经过实际操作得出的,其中包含awk和shell混合编程

    新版Linux Shell编程实训(全)20170518.docx

    任务7.3 Shell案例:使用三种循环结构打印九九乘法表 141 练习(前两题每题30分,第三题40分,共计100分) 144 项目八 Shell函数 146 [学习目标] 146 任务8.1 Shell函数 147 8.1.1 Shell中函数的定义 147 8.1.2 函数...

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    本书通过各种实用的系统管理小技巧和趣味脚本代码,详尽地介绍了shell编程各个不同的方面。学完本书后,你将成为一名shell编程高手。 内容简介 本书共分五部分 ,详细介绍了SHELL编程技巧,各种UNIX命令及语法,还...

    shell中的awk命令

    shell中的awk命令 文章目录shell中的awk命令1.awk–“样式扫描和处理语言”2.awk模式匹配3.记录和域4.指定分隔符`-F “”` 指定分隔符`FS=””` 指定分隔符5.关系和布尔运算值6.表达式7.系统变量8.格式化输出9.内置...

    shell编程学习资料

    shell编程学习资料,常见的shell编程指导,sed,awk。

    linux-Shell编程视频教程

    11.2.3 Shell编程-字符截取命令-awk命令.mp4 11.2.4 Shell编程-字符截取命令-sed命令.mp4 11.3 Shell编程-字符处理命令.mp4 11.4 Shell编程-条件判断.mp4 11.5.1 Shell编程-流程控制-if语句.mp4 11.5.2 Shell...

    Linux Shell编程3/3

    Linux Shell编程经典著作: 第一部分SHELL |_文件安全与权限 |_使用find和xargs |_后台执行命令 |_文件名置换 |_shell输入与输出 |_命令执行顺序 第二部分文本过滤 |_正则表达式介绍 ...

    LINUX与UNIX SHELL编程指南

    呵呵,这真的是一本好书《LINUX与UNIX SHELL编程指南》 --------------------------------------------- 经典《Linux与UNIX Shell编程指南》 shell是一种完整的编程语言,易学易用;shell脚本可以使烦人的手工作业...

Global site tag (gtag.js) - Google Analytics