awk — 文本处理语言

awk 是一个强大的文本处理工具,支持字段提取、条件判断、算术运算和格式化输出。

命令说明

awk 逐行处理输入,将每行分割为字段(默认按空白字符),然后执行用户定义的模式-动作规则。它是一种完整的文本处理语言,支持变量、条件、循环和函数。

应用场景

  • 提取文件中的特定列
  • 计算和统计
  • 格式化输出
  • 处理 CSV/日志数据
  • 条件筛选
  • 生成报告

常用示例

示例 1:提取指定列

bash
复制代码
awk '{print $1}' data.txt

示例 2:提取多个列并格式化

bash
复制代码
awk '{print $2, $4}' access.log

示例 3:使用自定义分隔符(CSV 文件)

bash
复制代码
awk -F',' '{print $1, $3}' users.csv

示例 4:条件筛选

bash
复制代码
awk '$3 > 100 {print $1, $3}' scores.txt

示例 5:计算总和和平均值

bash
复制代码
awk '{sum += $1; count++} END {print "Total:", sum, "Average:", sum/count}' numbers.txt

示例 6:使用内置变量

bash
复制代码
awk 'END {print NR, "lines processed"}' access.log
plaintext
复制代码
10000 lines processed

示例 7:格式化输出

bash
复制代码
awk '{printf "%-20s %10d\n", $1, $3}' data.txt

示例 8:多条件模式

bash
复制代码
awk '/ERROR/ && $3 > 10 {print $0}' app.log

示例 9:将多个字段连接输出

bash
复制代码
awk -F':' '{print $1 ":" $7}' /etc/passwd

awk 内置变量

变量 说明
NR 当前处理的总行数(记录数)
FNR 当前文件中的行数
NF 当前行的字段数
$0 整行内容
$1, $2, ... 第 1、2...个字段
FS 输入字段分隔符(默认空白)
OFS 输出字段分隔符(默认空格)
RS 记录分隔符(默认换行符)
ORS 输出记录分隔符
FILENAME 当前处理的文件名

help 参数详解

参数 长参数 说明
-F SEPARATOR --field-separator 设置字段分隔符
-v VAR=VALUE --assign 在处理前设置变量
-f FILE --file=FILE 从文件读取 awk 程序
-W compat 使用兼容模式
-W posix 使用 POSIX 模式