awk使用大全
内容提要: awk是AIX和UNIX上的最大的文字匹配搜索工具。本文详细awk的适用方法。
awk 命令的
awk 命令的
过记录和字段的文件
awk 命令言 :
模式
操作
特殊
示例
明:
在文件中与模式匹配的行,然后在它上面行特定的操作。
awk [ -F Ere ] [ -v Assignment ] ... { -f ProgramFile | ' Program ' } [ [ File ... | Assignment ... ] ] ...
描述
awk 命令利用一提供的指令来将一文件和用提供的展正表达式比,一次一行。然后在任何与展正表达式匹配的行上行操作。 awk 理的最大记录大小 10KB。
awk 命令的模式搜索比 grep 命令的搜索更常用,且它允入文本行上行多个操作。 awk 命令言不需要编译,并允使用量、数字函数、字符串函数和逻辑
运算符。
awk 命令受到 LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC NLSPATH PATH 量的影响。
awk 命令的
awk 命令采取两种类型的入:入文本文件和程序指令。
入文本文件
搜索和操作在入文本文件上行。文件如下指定:
在命令行指定 File 量。
修改特殊ARGV ARGC
在未提供 File 量的情况下提供入。
如果用 File 量指定多个文件,文件以指定的理。
程序指令
提供的指令控制 awk 命令的操作。些指令来自命令行的‘ Program 量或来自用 -f 志和 ProgramFile 量一起指定的文件。如果指定多个程序文件,些文件以指定的序串,且使用指令的生成的序。
awk 命令的
awk 命令从入文本文件中的数据生三种类型的出:
· 定的数据可以打印至出,此出完全同于入文件。
· 入文件的定部分可以更改。
· 定数据可以更改并可打印至出,此出可以同于或不同于入文件的内容。
可以在同一个文件上行所有三种类型的出。 awk 命令识别言允重定向出。
过记录和字段的文件
文件以下列方式理:
1. awk 命令描它的指令,并行任何指定入文件前生的操作。
awk 言中的 BEGIN 句允指定在取第一个记录前要行的一指令。这对于初始化特殊量特有用。
2. 从入文件取一个记录
记录是由记录分隔符隔的一数据。记录分隔符的缺省行字符,它使文件中的一行成一个独的记录记录分隔符可以通过设RS 特殊量来更改。
3. 记录是相awk 命令的指令指定的每种模式比
命令指令可以指定较记录内的特定字段。缺省情况下,字段由空白区(空格或跳格)隔个字段由一个字段量表示。记录中的第一个字段指定 $1 量,第二个字段指定 $2 量,以此推。整个记录指定 $0 量。字段分隔符可以通在命令行使用 -F 志或通过设置 FS 特殊量来更改。FS 特殊量可以下列:空格、个字符或展正表达式。
4. 如果一个记录与一个模式相匹配,任何与模式相的操作都在该记录行。
5. 在记录个模式比行了所有指定操作以后,从取下一个记录;在从入文件取所有的记录之前,该进程重
6. 如果已指定了多个入文件,下一个文件打,且在取所有的入文件之前,该进程重
7. 在取了最后一个文件中的最后一个记录后, awk 命令行任何指定理后生的指令。
awk 言中的 END 句允grep命令有什么用许指定在取最后一个记录后要行的操作。这对送有 awk 命令完成了什工作的消息特有用。
awk 命令
awk 命令言由以下格式的句构成:
Pattern { Action }
如果一个记录与指定模式相匹配,或包含与模式匹配的字段,则执行相的操作。可以指定没有操作的模式,这种情况下,包含模式的整行写至出。为每记录执行指定的没有模式的操作。
模式
awk 命令法中使用四种类型的模式:
表达式
系表达式
模式的
BEGIN 和 END 模式
表达式
aw k 命令使用的展正表达式似于 grep 或 egrep 命令使用的表达式。展正表达式
的最简单的形式就是包括在斜杠中的一串字符。例如,假定一个名 testfile 的文件具有以下内容:
smawley, andy
smiley, allen
smith, alan
smithern, harry
smithhern, anne
smitters, alexis
入以下一行命令:
awk '/smi/' testfile
将把包含 smi 字符串的具体的所有记录打印至出。在个示例中, awk 命令的程
序 '/smi/' 是一个没有操作的模式。出是:
smiley, allen
smith, alan
smithern, harry
smithhern, anne
smitters, alexis
以下特殊字符用于形成展正表达式:
字符
功能
+
指定如果一个或多个字符或展正表达式的具体(在 + (加号)前)在个字符串中,字符串匹配。命令行:
awk '/smith+ern/' testfile
将包含字符 smit,后跟一个或多个 h 字符,并以字符 ern 束的字符串的任何记录打印至出。此示例中的出是:
smithern, harry
smithhern, anne
?
指定如果零个或一个字符或展正表达式的具体(在 ?(号)之前)在字符串中,字符串匹配。命令行:
awk '/smith?/' testfile
将包含字符 smit,后跟零个或一个 h 字符的例的所有记录打印至出。此示例中的出是:
smith, alan
smithern, harry
smithhern, anne
smitters, alexis
|
指定如果以 |(垂直线)隔的字符串的任何一个在字符串中,字符串匹配。命令行:
awk '/allen
|
alan /' testfile
将包含字符串 allen 或 alan 的所有记录打印至出。此示例中的出是:
smiley, allen
smith, alan
( )
在正表达式中将字符串合在一起。命令行:
awk '/a(ll)?(nn)?e/' testfile
将具有字符串 ae 或 alle 或 anne 或 allnne 的所有记录打印至出。此示例中的出是:
smiley, allen
smithhern, anne
{ m }
指定如果正好有 m 个模式的具体位于字符串中,字符串匹配。命令行:
awk '/l{2}/' testfile
打印至
smiley, allen
{ m, }
指定如果至少 m 个模式的具体在字符串中,字符串匹配。命令行:
awk '/t{2,}/' testfile
打印至出:
smitters, alexis
{ m, n }
指定如果 m n (包含的 m 和 n)个模式的具体在字符串中(其中 m <= n ),字符串匹配。命令行:
awk '/er{1, 2}/' testfile
打印至出:
smithern, harry
smithern, anne
smitters, alexis
[ String ]
指定正表达式与方括号内 String 量指定的任何字符匹配。命令行:
awk '/sm[a-h]/' testfile
将具有 sm 后跟以字母序从 a 到 h 排列的任何字符的所有记录打印至出。此示例的出是:
smawley, andy
[^ String ]
在 [ ](方括号)和在指定字符串开头的 ^ (插入号) 指明正表达式与方括号内的任何字符 匹配。这样,命令行:
awk '/sm[^a-h]/' testfile
打印至出:
smiley, allen
smith, alan
smithern, harry
smithhern, anne
smitters, alexis
~,!~
表示指定量与正表达式匹配(代字号)或不匹配(代字号、感号)的条件句。命令行:
awk '$1 ~ /n/' testfile
将第一个字段包含字符 n 的所有记录打印至出。此示例中的出是:
smithern, harry
smithhern, anne
^
指定字段或记录开头。命令行:
awk '$2 ~ /^h/' testfile
将把字符 h 作第二个字段的第一个字符的所有记录打印至出。此示例中的出是:
smithern, harry
$
指定字段或记录的末尾。命令行:
awk '$2 ~ /y$/' testfile
将把字符 y 作第二个字段的最后一个字符的所有记录打印至出。此示例中的出是:
smawley, andy
smithern, harry
. (句号)
表示除了在空白末尾的行字符以外的任何一个字符。命令行:
awk '/a..e/' testfile
将具有以两个字符隔的字符 a 和 e 的所有记录打印至出。此示例中的出是:
smawley, andy
smiley, allen
smithhern, anne
* (星号)
表示零个或更多的任意字符。命令行:
awk '/a.*e/' testfile
将具有以零个或更多字符隔的字符 a 和 e 的所有记录打印至出。此示例中的出是:
smawley, andy
smiley, allen
smithhern, anne
smitters, alexis
\ (反斜杠)
转义字符。当位于在展正表达式中具有特殊含的任何字符之前转义字符除去字符的任何特殊含。例如,命令行:
/a\/\//
将与模式 a // 匹配,因反斜杠否定斜杠作表达式定界符的通常含。要将反斜杠本身指定字符,使用双反斜杠。有反斜杠及其使用的更多信息,以下转义序列的内容。
识别转义序列
awk 命令识别大多数用于 C 定中的转义序列,以及 awk 命令本身用作特殊字符的几个转义序列。转义序列是: