awk 字段处理是什么
awk 天然按字段工作:默认以空白切分,指定分隔符后按分隔符切,用美元符加序号取字段,整行作为一个特殊变量,字段总数为另一个内置变量。修改任一字段后再输出整行,会按输出分隔符重新拼装,等于顺手做了一次格式化。这些能力让 awk 成为按列裁剪、重排与计算的主力工具。
基本信息
| 适用平台 | Linux、Unix 通用;多字符分隔符属于扩展能力 |
|---|---|
| 命令语法 | awk -F'分隔符' '模式 {动作}' 文件 |
| 常用内置变量 | 整行、按序号取字段、字段数、输入分隔符、输出分隔符、行号 |
| 输出控制 | 修改字段后打印整行会按输出分隔符重拼 |
典型使用场景
- 取某几列重新排列后输出
- 取每行最后一个字段,例如日志里的状态或耗时
- 按列做统计与求和
- 改写分隔符:把冒号分隔的文本转成逗号分隔
- 处理以多字符或正则分隔的文本
常用示例
常用示例
awk -F, '{print $2, $1}' data.csv # 交换前两列
awk '{print $NF}' access.log # 取每行最后一列
awk -F: 'BEGIN{OFS=":"} {$3=$3"x"; print}' f
awk -F'[ =]' '{print $2}' app.log # 正则分隔
awk -F, 'NR>1 {s+=$3} END {print s}' d.csv # 按列求和
awk 'NF>5' data.txt # 只输出字段数大于 5 的行常用内置变量
| 变量 | 含义 | 提示 |
|---|---|---|
| 整行变量 | 当前行的完整内容 | 直接打印即原始行 |
| 序号字段 | 第 N 个字段 | 编号从 1 开始 |
| 末字段变量 | 最后一个字段 | 取末尾列的快捷写法 |
| 字段数变量 | 当前行的字段个数 | 可用来过滤行 |
| 输入输出分隔符 | 切分与拼接的依据 | 输入用选项设,输出在开始块里设 |
| 行号变量 | 总行号与当前文件行号 | 处理多个文件时用于区分 |
只要修改过任一字段,打印整行时就会按输出分隔符重新拼装,等于自动做了一次格式化;不想被重排就不要动字段。
按单一字符切分对带引号的 CSV 不适用:引号内部的分隔符也会被当成字段边界,复杂结构交给专门的 CSV 工具处理更稳。