awk模式匹配


在这篇文章中,我们将看到许多小的,甚至没有什么意义的例子,但他们能够验证awk程序脚本的主要特点。

当awk读入一行时,它试图匹配脚本中的每个模式匹配规则。只有与一个特定的模式相匹配的输入行才能成为操作对象。如果没有指定操作,与模式相匹配的输入行将被打印出来(执行打印语句是一个默认操作)。参阅下面的脚本:

/^$/ { print "This is a blank line." }
该脚本表示:如果输入行为空,那么打印"This is a blank line" 。这里的模式为一个正则表达式,用来表示一个空行。这个处理和我们以前所见到的一样,只包含一条print语句。

如果我们将这个脚本放在一个称为awkscr的文件中,并使用名为test的输入文件,这个文件中包含3个空行,然后使下面的命令执行这个脚本:

$ awk -f awkscr test
This is a blank line.
This is a blank line.
This is a blank line.
(从这里开始,我们将假定脚本放在一个单独的文件中,并使用-f命令行选项来调用。)这个结果告诉我们在test中有3个空行,脚本忽咯了非空的行。

给以上的脚本加入几个新的规则。现在的脚本要对输入进行分析,并将他们归类为整数、字符串或空行。

/[0-9]+/ { print "That is an integer" }
/[A-Za-z]+/ { print "This is a string" }
/^$/ { print "This is a blank line." }
总的思想是,如果一个输入行能够和任何一个模式匹配,那么就执行相关的print语句。元字符+是正则表达式元字符拓展集中的一部分,它表示"一个或更多"。因此,包含一个或多个数字序列的行将被看作是一个整数。以下是一个使用标准输入的运行示例:

$ awk -f awkscr
4
That is an integer
t
This is a string
4T
That is an integer
This is a string
RETURN
This is a blank line.
44
That is an integer
CTRL-D
$
注意,输入"4T"被标识为既是整数又是字符串。一行可以匹配一条或多条规则。你可以编写一个更严格的规则以防止一行与多条规则相匹配。也可以编写操作来跳过脚本中的其他部分。

--------------------------------------分割线 --------------------------------------

AWK简介及使用实例

AWK 简介和例子

Shell脚本之AWK文本编辑器语法

正则表达式中AWK的学习和使用

文本数据处理之AWK 图解

如何在Linux中使用awk命令

文本分析工具-awk 

--------------------------------------分割线 --------------------------------------

本文永久更新链接地址

相关内容