awk 文本处理速查表

把 awk 最常用的语法和文本处理技巧整理成速查表,日志分析和数据提取时对照查。

系统与运维·共 37 条命令·最后更新 2026-07-19
返回 系统与运维

基础语法 Basic Syntax 6

awk '{print $1}' file
打印第一列(默认空格分隔)
awk -F: '{print $1, $3}' /etc/passwd
指定冒号分隔符
awk '{print $1, $NF}' file
打印第一列和最后一列
awk '{print NR, $0}' file
打印行号和整行
awk 'NR==10' file
打印第 10 行
awk 'NR>=10 && NR<=20' file
打印第 10-20 行

内置变量 Built-in Variables 8

$0
整行内容
$1, $2, $NF
第 1/2/最后一列
NR
当前行号(全局)
NF
当前行列数
FS
输入分隔符(默认空格)
OFS
输出分隔符
RS
输入记录分隔符(默认换行)
ORS
输出记录分隔符

条件判断 Conditionals 6

awk '$3 > 100' file
打印第三列大于 100 的行
awk '$1 == "error"' file
打印第一列等于 error 的行
awk '$1 ~ /pattern/' file
第一列匹配正则
awk '$1 !~ /pattern/' file
第一列不匹配正则
awk 'NR==1 || $1 > 100' file
第一行或第一列大于 100
awk '$1 == "a" {print $2}' file
条件动作

统计与计算 Statistics 5

awk '{sum += $1} END {print sum}' file
对第一列求和
awk '{sum += $1} END {print sum/NR}' file
计算第一列平均值
awk '{count++} END {print count}' file
统计行数
awk '{count[$1]++} END {for(k in count) print k, count[k]}' file
按第一列分组统计
awk 'BEGIN{max=0} {if($1>max) max=$1} END{print max}' file
找第一列最大值

字符串函数 String Functions 7

length($0)
当前行长度
substr($0, 5, 10)
从第 5 个字符开始截取 10 个
index($0, "text")
查找子串位置(1 开始,0 表示未找到)
split($0, arr, ":")
按分隔符拆分为数组
sub(/old/, "new", $0)
替换第一个匹配
gsub(/old/, "new", $0)
替换所有匹配
tolower($0) / toupper($0)
转小写/大写

常用场景 Common Patterns 5

awk '{print $1}' access.log | sort | uniq -c | sort -rn
统计 IP 访问量 TOP
awk '$9 == 500 {print $7}' access.log
提取 500 错误的 URL
awk -F, '{print $2, $3}' data.csv
处理 CSV 文件
awk 'BEGIN{OFS=","} {print $1, $2}' file
输出为 CSV 格式
awk '{sum+=$5} END{print sum/1024/1024 " MB"}' file
计算列总和并转换单位

💡 提示

  • awk 默认以空格或 Tab 分隔,用 -F 指定其他分隔符。
  • BEGIN 块在处理文件前执行,END 块在处理完后执行。
  • awk 数组是关联数组(哈希表),键可以是字符串。