Awk 命令
1. 工具定位与核心执行模型
Section titled “1. 工具定位与核心执行模型”Awk 既是一个强大的 Linux 命令行工具,也是一种专门用于文本处理和报表生成的编程语言。 它按行读取文件,默认通过 空格或制表符 将每行切分为多个字段(Field),随后执行用户指定的匹配与操作逻辑。
1.1. 基础语法结构
Section titled “1.1. 基础语法结构”awk [选项] '条件 { 动作 }' 文件名若未指定“条件”,则默认对每一行执行“动作”。
2. 核心内建变量与字段提取
Section titled “2. 核心内建变量与字段提取”Awk 提供了极其丰富的内置变量来控制游标与文本块:
| 内建变量 | 含义与作用 |
|---|---|
$0 | 代表当前读取的 完整一整行 文本。 |
$1, $2… | 代表被分隔符切分后的 第 n 个字段(索引从 1 开始)。 |
NF | (Number of Fields) 代表当前行拥有的 字段总数。 👉 $NF 常用于提取 最后一个字段。 |
NR | (Number of Records) 代表当前已处理的 行号。 |
FILENAME | 当前正在处理的输入文件名称。 |
2.1. 实战演示:自定义分隔符 (-F)
Section titled “2.1. 实战演示:自定义分隔符 (-F)”使用 -F 参数可以重写默认的空格切分规则。例如,提取 /etc/passwd 中以冒号分割的用户名:
awk -F ':' '{ print $1 }' /etc/passwd3. 条件匹配与复杂控制逻辑
Section titled “3. 条件匹配与复杂控制逻辑”3.1. 正则表达式匹配
Section titled “3.1. 正则表达式匹配”作为“条件”过滤出符合正则的行,然后再执行动作:
# 仅对包含 "usr" 字符串的行,打印其第一个字段awk -F ':' '/usr/ {print $1}' demo.txt3.2. 内部控制流 (if-else)
Section titled “3.2. 内部控制流 (if-else)”动作区块 {} 内部支持 C 语言风格的编程语法:
# 判断第一个字段首字母是否大于 "m",动态输出不同内容awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt3.3. 格式化输出拼接
Section titled “3.3. 格式化输出拼接”在 print 中使用逗号 , 代表输出时用空格分隔;使用双引号 "" 原样输出静态字符:
# 输出:整行内容 ) 第二个字段awk '{ print $0, ")", $2 }' demo.txt