2024年4月29日发(作者:)

awk使用规则

awk 是一种很棒的语言。awk 适合于文本处理和报表生成,它还有许多精心设计的特性,

允许进行需要特殊技巧程序设计。与某些语言不同,awk 的语法较为常见。它借鉴了某些

语言的一些精华部分,如 C 语言、python 和 bash(虽然在技术上,awk 比 python

和 bash 早创建)。awk 是那种一旦学会了就会成为您战略编码库的主要部分的语言。

第一个 awk

让我们继续,开始使用 awk,以了解其工作原理。在命令行中输入以下命令:

$ awk '{ print }' /etc/passwd

您将会见到 /etc/passwd 文件的内容出现在眼前。现在,解释 awk 做了些什么。调用 a

wk 时,我们指定 /etc/passwd 作为输入文件。执行 awk 时,它依次对 /etc/passwd

中的每一行执行 print 命令。所有输出都发送到 stdout,所得到的结果与与执行catting

/etc/passwd完全相同。

现在,解释 { print } 代码块。在 awk 中,花括号用于将几块代码组合到一起,这一点类

似于 C 语言。在代码块中只有一条 print 命令。在 awk 中,如果只出现 print 命令,

那么将打印当前行的全部内容。

这里是另一个 awk 示例,它的作用与上例完全相同:

$ awk '{ print $0 }' /etc/passwd

在 awk 中,$0 变量表示整个当前行,所以 print 和 print $0 的作用完全一样。

如果您愿意,可以创建一个 awk 程序,让它输出与输入数据完全无关的数据。以下是一个

示例:

$ awk '{ print "" }' /etc/passwd

只要将 "" 字符串传递给 print 命令,它就会打印空白行。如果测试该脚本,将会发现对

于 /etc/passwd 文件中的每一行,awk 都输出一个空白行。再次说明, awk 对输入文

件中的每一行都执行这个脚本。以下是另一个示例:

$ awk '{ print "hiya" }' /etc/passwd

运行这个脚本将在您的屏幕上写满 hiya。:)

awk的内建函数

14.8.1. 字符串函数

sub函数匹配记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。

如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配的时候。格式如下:

sub (regular expression, substitution string):

sub (regular expression, substitution string, target string)

实例:

$ awk '{ sub(/test/, "mytest"); print }' testfile

$ awk '{ sub(/test/, "mytest"); $1}; print }' testfile

第一个例子在整个记录中匹配,替换只发生在第一次匹配发生的时候。如要在整个文件中进行匹

配需要用到gsub

第二个例子在整个记录的第一个域中进行匹配,替换只发生在第一次匹配发生的时候。

gsub函数作用如sub,但它在整个文档中进行匹配。格式如下:

gsub (regular expression, substitution string)

gsub (regular expression, substitution string, target string)

实例:

$ awk '{ gsub(/test/, "mytest"); print }' testfile

$ awk '{ gsub(/test/, "mytest"), $1 }; print }' testfile