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
变量并初始化。
示例
- 打印文件的第 2 行:
awk 'NR==2' filename.txt
NR
是内置变量,表示当前记录的编号,对于每一行来说,它就是行号。
- 打印每一行的第一个字段:
awk '{print $1}' filename.txt
$1
表示当前行的第一个字段。
- 计算文件中行数:
awk 'END{print NR}' filename.txt
END
是一个特殊的模式,它匹配输入的最后一个记录。
- 计算文件中某个字段的总和:
awk '{sum += $1} END{print sum}' filename.txt
这里 sum
是一个变量,用于累加第一个字段的值。
- 打印包含特定文本的行:
awk '/pattern/' filename.txt
这会打印包含 pattern
文本的所有行。
- 使用字段分隔符:
awk -F, '{print $2}' filename.csv
这里 -F,
设置字段分隔符为逗号,$2
表示打印每一行的第二个字段。
注意事项
awk
的模式可以是复杂的正则表达式,也可以是条件表达式。awk
脚本可以非常复杂,包括循环、条件语句、函数定义等。awk
内置了许多变量,如NF
(当前行的字段数)、NR
(已处理的记录数)、FS
(字段分隔符)等。awk
可以处理文本文件,也可以从管道或命令的输出中读取数据。
awk
是一个非常灵活的工具,它在文本处理和数据分析方面的能力非常强大,适合于各种复杂的文本处理任务。