awk 文本处理速查表
把 awk 最常用的语法和文本处理技巧整理成速查表,日志分析和数据提取时对照查。
返回 系统与运维基础语法 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 数组是关联数组(哈希表),键可以是字符串。