📖 awk 文本处理速查

按使用场景分组,点击"复制"按钮一键复制命令

字段切分与分隔符
按逗号切分 CSV,取第 2 列(-F 指定输入分隔符)
awk -F',' '{print $2}' data.csv
按冒号切分 /etc/passwd,取用户名
awk -F: '{print $1}' /etc/passwd
按 Tab 切分(\t 是转义写法,不要写真实 Tab 字符)
awk -F'\t' '{print $3}' data.tsv
多分隔符:逗号或分号都算(-F 支持正则字符组)
awk -F'[,;]' '{print $1}' data.csv
BEGIN 里设 FS/OFS,同时改掉输入与输出分隔符
awk 'BEGIN{FS=":"; OFS="-"}{print $1,$3}' /etc/passwd
取最后一个字段(NF 是当前行的字段数,$NF 即末列)
awk -F, '{print $NF}' data.csv
输出格式与内置变量
输出行号与整行内容(NR 是行号,$0 是整行)
awk '{print NR": "$0}' file.txt
跳过第 1 行表头(NR>1 作为模式直接过滤)
awk 'NR>1' data.csv
统计文件总行数(END 块在处理完后执行)
awk 'END{print NR}' file.txt
printf 对齐输出表格(%-10s 左对齐,%5d 右对齐)
awk 'BEGIN{printf "%-10s %5s\n","NAME","AGE"} {printf "%-10s %5d\n",$1,$2}' file.txt
空白分隔转逗号:$1=$1 触发重建记录,OFS 才生效
awk 'BEGIN{OFS=","}{$1=$1; print}' file.txt
按行拆分成多个文件(重定向文件名可以拼接变量)
awk '{print > ("out_" NR ".txt")}' file.txt
条件过滤与模式匹配
数值比较过滤(第 3 列大于 100 才输出整行)
awk '$3 > 100' data.txt
匹配正则关键词(等价 grep ERROR)
awk '/ERROR/' app.log
反向匹配:排除含 DEBUG 的行
awk '!/DEBUG/' app.log
多条件组合:状态码 200 且响应时间大于 1000ms
awk '$9=="200" && $10>1000' access.log
按行号区间取第 10 到 20 行
awk 'NR>=10 && NR<=20' file.txt
忽略大小写匹配(gawk 扩展 IGNORECASE,mawk 不支持)
awk 'BEGIN{IGNORECASE=1} /error/' app.log
数组与统计
按列求和(变量未初始化时按 0 参与运算)
awk '{sum+=$2} END{print sum}' data.txt
求平均值(先判 n>0,避免空文件除以零)
awk '{s+=$1;n++} END{if(n>0) printf "%.2f\n", s/n}' data.txt
分组计数:统计每个值出现次数
awk '{c[$1]++} END{for(k in c) print k, c[k]}' data.txt
按 key 求和:同一 key 的第 2 列累加
awk -F, '{a[$1]+=$2} END{for(k in a) print k, a[k]}' data.csv
行去重且保持原顺序(!seen[$0]++ 经典写法)
awk '!seen[$0]++' file.txt
统计访问日志状态码分布(配合 sort/uniq 排序)
awk '{print $9}' access.log | sort | uniq -c | sort -rn
实战与踩坑
按表头名取列,不依赖列序号(列顺序变了也不会错)
awk -F, 'NR==1{for(i=1;i<=NF;i++) h[$i]=i; next} {print $h["name"]}' data.csv
找出字段数不对的 CSV 行(脏数据排查)
awk -F, 'NF!=3 {print NR": "$0}' data.csv
去掉字段两侧的双引号
awk -F, '{gsub(/"/,"",$2); print $2}' data.csv
去掉行首空白(sub 只替换第一个匹配)
awk '{sub(/^[ \t]+/,""); print}' file.txt
用 -v 传外部变量,不要在单引号里硬编码
awk -v t=100 '$2 > t' data.txt
踩坑:字符串拼接不会自动加 OFS,print $1 $2 会粘在一起
awk 'BEGIN{OFS=","} {print $1, $2}' file.txt

📖 awk 文本处理速查 使用说明

本页收录 awk 文本处理速查 的常用命令、参数与典型用法,按场景分组,每条命令可一键复制到终端。如果命令行里反复踩坑、参数记混,不妨先去在线工具里实时校验一下。

更多命令行场景可参考本站的 命令速查总目录,或尝试本站的 在线工具集——正则测试、时间戳转换、Cron 解析、HTTP 状态码查询等高频问题都能在浏览器里直接解决。

相关在线工具

同系列速查