`
天梯梦
  • 浏览: 13731257 次
  • 性别: 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,sed,crontab

    在Linux系统中,Shell编程是系统管理员和开发者日常工作中不可或缺的一部分。它允许用户通过命令行接口执行各种自动化任务。在给定的压缩包文件中,我们聚焦于三个关键的Shell工具:awk、sed和crontab。下面将详细...

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

    ### Shell编程中的AWK使用详解 #### 一、AWK简介 AWK 是一种功能强大的文本处理工具,其名称来源于三位创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的首字母。它不仅广泛应用于 Linux 环境,也是任何...

    shell编程教程.chm

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

    linux shell 编程之 awk用法

    Awk是Linux shell编程中一个非常灵活且功能强大的工具,它能够高效地处理大量文本数据,无论是简单地提取信息还是复杂的数据分析,都能胜任。掌握Awk的使用技巧,可以极大提高数据处理和脚本编写的效率。通过本文的...

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

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

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

    Linux 主要shell命令、sed、awk使用详解 Linux 主要shell命令详解 ...总结来说,本章节主要讲述了 shell 的工作原理、shell 的种类、shell 的一般操作及 Bash 的特性,并对 sed 编辑器和 awk 使用进行了详细的讲解。

    shell、awk编程教材

    SHELL编程是Unix/Linux操作系统环境中的一种脚本语言,它允许用户编写简单的程序来自动化日常任务。在本文中,我们将深入探讨SHELL编程的基础知识,包括其概念、特点以及基本语法。 **一、SHELL概述** SHELL是用户...

    shell awk实用实例教程

    例如,一个简单的Shell脚本可能这样使用Awk: ```bash #!/bin/bash # 计算一个文件中单词出现次数 cat file.txt | awk '{for(i=1; i; i++) {a[$i]++}} END{for (word in a) print word, a[word] }' ``` 这个脚本首先...

    LinuxShell编程基础教程.pdf

    Linux Shell 编程基础教程 本资源为 Linux Shell 编程基础教程,涵盖了 Linux Shell 编程...* awk:从文本文件中提取字段 这些命令可以帮助我们在 Shell 脚本中完成各种任务,例如文件操作、字符串处理、数学运算等。

    UNIX命令及SHELL编程

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

    Unix基础、AWK、SHELL

    了解并熟练掌握Unix基础、AWK和Shell编程,对于IT从业者尤其是系统管理员、开发者来说,能够提升工作效率,更好地管理和操控系统资源。通过深入学习这些内容,可以构建坚实的基础,为后续的Linux、网络管理、编程等...

    awk 介绍,unix shell

    awk 是一个强大的文本...当遇到文本处理问题时,可以遵循这样的顺序:首先尝试使用 shell 工具,如果不够,再使用 awk,如果 awk 仍无法满足需求,那么可以考虑使用 C 语言或 C++ 这样的编程语言来实现更复杂的逻辑。

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

    本文将深入探讨shell编程,以及与之紧密相关的sed、awk和grep命令,这些都是Linux系统中进行文本处理和数据操作的重要工具。 首先,让我们了解什么是Shell编程。Shell是操作系统提供的一个接口,允许用户与系统内核...

    awk使用手册,写shell的下载吧

    ### AWK 使用手册知识点概述 #### 一、AWK 的基本概念与背景 - **AWK** 是一种专为文本处理而设计的编程语言,它能够处理简单的数据重格式化任务,仅需几行代码即可完成。AWK 的名字来源于其三位原始设计者的名字...

    Shell脚本之awk篇

    通过这篇文档,读者可以掌握awk的基本概念、工作原理、语法格式和程序结构,进一步学习如何在Shell脚本中使用awk进行文本处理和数据分析。学习awk对于提高Linux/Unix系统下的文本处理能力具有重要意义,特别是在编写...

    Unix Shell编程工具

    Unix Shell编程工具是Unix/Linux操作系统中的重要组成部分,它既是用户与操作系统交互的界面,也是一种强大的编程语言。在本文中,我们将深入探讨Unix Shell的核心概念、常用工具以及它们在实际问题解决中的应用。 ...

    Shell、awk、sed面试题汇总(无答案).doc

    4. shell 程序设计:可以使用 Shell 编程来实现自动创建目录、文件复制、权限设置等操作。 5. Bash shell 中的 `2>&1`:表示将标准输出和标准错误输出 merge 到一起。 awk 6. 数据统计:可以使用 awk 命令来统计...

Global site tag (gtag.js) - Google Analytics