1. 什么是 Awk?
Awk 是一种功能强大的文本处理工具,可以用于数据提取、数据转换和文本分析等任务。它是由 Alfred V. Aho、Peter J. Weinberger 和 Brian W. Kernighan 在 1977 年开发的,名字由他们三人的名字的首字母组成。
2. Awk 的基本用法
Awk 的基本用法是将文本文件分为若干记录和字段,然后对每个记录进行处理。默认情况下,Awk 使用空格或制表符作为字段的分隔符。可以通过设置 FS
变量来修改字段的分隔符。常用的 Awk 命令格式如下:
awk 'pattern { action }' file
其中,pattern
是用于匹配记录的模式,action
是要执行的操作。如果省略 pattern
,则默认匹配所有的记录。action
可以是一个简单的命令,也可以是由多条命令组成的块。当 pattern
匹配到记录时,相应的 action
就会执行。Awk 还内置了一些变量和函数,用于处理匹配到的记录和字段。
3. 实例:统计文件中单词的个数
下面是使用 Awk 统计文件中单词个数的示例:
awk '{ for (i=1; i<=NF; i++) count[$i]++ } END { for (word in count) print word, count[word] }' file.txt
在这个命令中,我们通过 for
循环遍历每个记录中的字段,并使用数组 count
统计每个单词出现的次数。最后,使用 END
块输出每个单词和对应的计数。
4. 实例:查找包含指定关键字的行
下面是一个查找包含指定关键字的行的示例:
awk '/keyword/' file.txt
在这个命令中,我们使用 /pattern/
的形式来指定模式,匹配所有包含指定关键字的行。
5. 实例:格式化输出
Awk 还提供了丰富的格式化输出功能。下面是一个格式化输出整数、浮点数和字符串的示例:
awk '{ printf "%-10d %-10.2f %-10s\n", $1, $2, $3 }' file.txt
在这个命令中,我们使用 printf
函数来按照指定格式输出字段。%10d
表示输出一个宽度为 10 的十进制整数,%-10.2f
表示输出一个宽度为 10 的保留 2 位小数的浮点数,%-10s
表示输出一个宽度为 10 的字符串。
6. Awk 脚本
除了在命令行中运行 Awk 命令,我们还可以将 Awk 命令保存为脚本文件进行调用。脚本文件以 .awk
或 .awkscript
为后缀,可以包含多条 Awk 命令和用户自定义的函数。
下面是一个使用 Awk 脚本进行文本处理的示例:
#!/usr/bin/awk -f
BEGIN { FS="," }
{ print $1 }
END { print "Done" }
在这个脚本文件中,BEGIN
块用于在处理开始之前设置变量和初始化,print $1
用于输出第一个字段,END
块用于在处理结束之后执行一些操作。然后,我们可以通过以下命令运行脚本:
awk -f script.awk file.txt
7. 小结
Awk 是一种强大的文本处理工具,可以用于数据提取、数据转换和文本分析等任务。通过灵活运用 Awk 的模式识别和处理能力,我们可以快速高效地处理大规模文本数据。希望本文对 Awk 的学习和应用有所帮助。
参考资料: