awk 是一个强大的文本处理工具,支持字段提取、条件判断、算术运算和格式化输出。
awk 逐行处理输入,将每行分割为字段(默认按空白字符),然后执行用户定义的模式-动作规则。它是一种完整的文本处理语言,支持变量、条件、循环和函数。
示例 1:提取指定列
awk '{print $1}' data.txt
示例 2:提取多个列并格式化
awk '{print $2, $4}' access.log
示例 3:使用自定义分隔符(CSV 文件)
awk -F',' '{print $1, $3}' users.csv
示例 4:条件筛选
awk '$3 > 100 {print $1, $3}' scores.txt
示例 5:计算总和和平均值
awk '{sum += $1; count++} END {print "Total:", sum, "Average:", sum/count}' numbers.txt
示例 6:使用内置变量
awk 'END {print NR, "lines processed"}' access.log
10000 lines processed
示例 7:格式化输出
awk '{printf "%-20s %10d\n", $1, $3}' data.txt
示例 8:多条件模式
awk '/ERROR/ && $3 > 10 {print $0}' app.log
示例 9:将多个字段连接输出
awk -F':' '{print $1 ":" $7}' /etc/passwd
| 变量 | 说明 |
|---|---|
NR |
当前处理的总行数(记录数) |
FNR |
当前文件中的行数 |
NF |
当前行的字段数 |
$0 |
整行内容 |
$1, $2, ... |
第 1、2...个字段 |
FS |
输入字段分隔符(默认空白) |
OFS |
输出字段分隔符(默认空格) |
RS |
记录分隔符(默认换行符) |
ORS |
输出记录分隔符 |
FILENAME |
当前处理的文件名 |
| 参数 | 长参数 | 说明 |
|---|---|---|
-F SEPARATOR |
--field-separator |
设置字段分隔符 |
-v VAR=VALUE |
--assign |
在处理前设置变量 |
-f FILE |
--file=FILE |
从文件读取 awk 程序 |
-W compat |
使用兼容模式 | |
-W posix |
使用 POSIX 模式 |