awk 是一个强大的文本处理工具,它在 Unix 和类 Unix 系统中用于处理和分析文本文件。awk 能够对输入的文本数据进行模式匹配和处理,执行各种文本操作,如搜索、替换、报告等。

基本语法

awk [options] 'pattern { actions }' file
  • options:可以是控制 awk 行为的命令行选项。
  • pattern:是一个模式,awk 会在输入文本中搜索匹配该模式的行。
  • actions:当找到匹配的模式时,awk 会执行这些动作。
  • file:是要处理的文件。

常用模式和动作

  • pattern 可以是一个正则表达式,或者一个范围(如 1,5 表示行号 1 到 5)。
  • actions 是一系列命令,可以是打印、计算、赋值等。

常用选项

  • -f:从文件中读取 awk 程序。
  • -F:设置字段分隔符,默认是空格或制表符。
  • -v:创建一个 awk 变量并初始化。

示例

  1. 打印文件的第 2 行
awk 'NR==2' filename.txt

NR 是内置变量,表示当前记录的编号,对于每一行来说,它就是行号。

  1. 打印每一行的第一个字段
awk '{print $1}' filename.txt

$1 表示当前行的第一个字段。

  1. 计算文件中行数
awk 'END{print NR}' filename.txt

END 是一个特殊的模式,它匹配输入的最后一个记录。

  1. 计算文件中某个字段的总和
awk '{sum += $1} END{print sum}' filename.txt

这里 sum 是一个变量,用于累加第一个字段的值。

  1. 打印包含特定文本的行
awk '/pattern/' filename.txt

这会打印包含 pattern 文本的所有行。

  1. 使用字段分隔符
awk -F, '{print $2}' filename.csv

这里 -F, 设置字段分隔符为逗号,$2 表示打印每一行的第二个字段。

注意事项

  • awk 的模式可以是复杂的正则表达式,也可以是条件表达式。
  • awk 脚本可以非常复杂,包括循环、条件语句、函数定义等。
  • awk 内置了许多变量,如 NF(当前行的字段数)、NR(已处理的记录数)、FS(字段分隔符)等。
  • awk 可以处理文本文件,也可以从管道或命令的输出中读取数据。

awk 是一个非常灵活的工具,它在文本处理和数据分析方面的能力非常强大,适合于各种复杂的文本处理任务。