1.概述
awk 是 Linux 系统中一个非常强大的文本处理工具,常被称为"三剑客"之一(另外两个是 grep 和 sed)。它主要用于从文本文件中提取、过滤和处理数据,尤其适合处理结构化数据,例如日志文件、CSV 文件等。
2.基本语法
awk [选项] '模式或条件 { 编辑指令 }' 文件
其中:
- 选项 :如
-F指定字段分隔符,-v定义变量等。 - 模式或条件:用于匹配输入行的规则,例如正则表达式。
- 编辑指令 :在匹配到行后要执行的操作,通常用大括号
{}包裹。 - 文件:要处理的输入文件。
3. 常见用法示例
-
打印文件中的所有内容
awk '{print}' file.txt
或
awk '{print $0}' file.txt
2.指定字段分隔符
默认情况下,awk 使用空格或制表符作为字段分隔符。如果文件使用逗号分隔,可以使用 -F 选项指定分隔符:
awk -F',' '{print $1, $2}' file.csv
3.提取特定字段
假设有一个文件,每行有多个字段,例如:
张三 25 工程师
李四 30 经理
你可以只打印第一列(姓名):
awk '{print $1}' file.txt
要打印第二列和第三列:
awk '{print $2, $3}' file.txt
4.条件匹配
可以使用模式匹配来筛选特定行。例如,只打印年龄大于 30 的行:
awk '$2 > 30 {print $0}' file.txt
使用 BEGIN 和 END
awk 'BEGIN { print "开始处理文件" } { print $0 } END { print "处理完成" }' file.txt
4.内置变量
awk 提供了一些常用的内置变量,帮助处理数据:
$0:整行内容。$1,$2, ...,$n:第 1、2、...、n 个字段。NF:当前行的字段数。NR:当前记录(行)号。FS:输入字段分隔符,默认为空格。OFS:输出字段分隔符,默认为空格。
示例
假设有一个文件 data.txt 内容如下:
1:Small house:Vermont:100 sqm
2:Large house:San Diego:300 sqm
3:Apartment:New York:70 sqm
4:Houseboat:Lond:Seattle:150 sqm
可以使用如下命令打印前两个字段:
awk -F':' '{print $1, $2}' data.txt
5.总结
awk 是一种功能强大的文本处理工具,适用于数据分析、日志解析、格式化输出等多种场景。它支持复杂的模式匹配、条件判断、变量使用和函数调用,是 Linux 系统管理员和开发人员不可或缺的工具之一。