一、awk 简介awk 是 Linux文本三剑客之一擅长按列截取、统计计算、格式化输出、日志数据分析默认以空格 / 制表符分割字段处理结构化日志、表格类文本效率极高。核心特点按行读取文本逐行拆分字段处理默认字段分隔符空格可自定义分隔符支持变量、判断、循环、数值运算常用于截取 IP、端口、访问量、服务统计基础语法bash运行awk [选项] 匹配规则{执行动作} 文件名二、内置变量必记$0整行全部内容$1第 1 列字段$2第 2 列字段依次类推NF当前行总字段数NR当前行号FS输入字段分隔符三、常用基础参数-F指定字段分隔符-v自定义外部变量四、基础字段截取实战1. 截取单列、多列bash运行# 只输出第一列 awk {print $1} test.txt # 输出第1列、第3列 awk {print $1,$3} test.txt # 输出整行内容 awk {print $0} test.txt2. 指定分隔符截取文件以冒号、逗号、斜杠分割时用-F指定分隔符bash运行# 以冒号分割取第一列 awk -F: {print $1} /etc/passwd # 以逗号分割截取字段 awk -F, {print $2} data.csv3. 打印行号、字段总数bash运行# 显示行号第一列 awk {print NR,$1} test.txt # 打印每行总列数 awk {print NF} test.txt # 打印最后一列 awk {print $NF} test.txt五、条件匹配筛选1. 匹配包含指定字符串的行bash运行# 匹配包含error的行输出整行 awk /error/{print $0} app.log # 匹配包含root的行输出第一列 awk /root/{print $1} /etc/passwd2. 数值条件判断bash运行# 第二列数值大于100才输出 awk $2100{print $1,$2} num.txt # 等于、小于判断 awk $38080{print $0} port.log3. 区间行筛选bash运行# 只输出5到10行内容 awk NR5 NR10{print $0} test.txt六、格式化输出与拼接自定义输出格式拼接符号、文字bash运行# 拼接字段与文字 awk {print IP:$1,状态:$2} net.log # 固定分隔符输出 awk {print $1|$3|$5} info.txt七、BEGIN、END 预处理与收尾BEGIN{}读取文本之前执行一次END{}读取文本全部结束后执行一次bash运行# 开头打印表头结尾统计总行数 awk BEGIN{print 用户名UID}{print $1,$3}END{print 总计行数:NR} /etc/passwd八、简单统计求和bash运行# 统计第二列所有数值总和 awk {sum$2}END{print 总和sum} score.txt # 统计匹配行数 awk /200/{count}END{print 成功请求数:count} access.log九、生产高频实战案例1. Nginx 日志截取访问 IPbash运行awk {print $1} access.log2. 筛选指定端口连接bash运行netstat -ant | awk $4~/8080/{print $0}3. 过滤空行与注释行bash运行awk !/^#/ !/^$/{print $0} nginx.conf4. 统计在线客户端数量bash运行ss -tn | awk NR1{ip[$5]}END{for(i in ip)print i,ip[i]}5. 多分隔符混合截取bash运行# 同时识别空格、冒号、斜杠作为分隔 awk -F[: /] {print $4} url.log十、三剑客场景区分速记grep单纯筛选匹配行sed批量修改、删除、替换文本awk列截取、统计、计算、结构化数据分析十一、极简命令总结取列awk {print $列数}改分隔符awk -F分隔符条件过滤awk /关键词/{print}数值统计sum$列头尾处理BEGIN{}、END{}
Linux awk 数据分析、字段截取实战
发布时间:2026/5/23 1:02:11
一、awk 简介awk 是 Linux文本三剑客之一擅长按列截取、统计计算、格式化输出、日志数据分析默认以空格 / 制表符分割字段处理结构化日志、表格类文本效率极高。核心特点按行读取文本逐行拆分字段处理默认字段分隔符空格可自定义分隔符支持变量、判断、循环、数值运算常用于截取 IP、端口、访问量、服务统计基础语法bash运行awk [选项] 匹配规则{执行动作} 文件名二、内置变量必记$0整行全部内容$1第 1 列字段$2第 2 列字段依次类推NF当前行总字段数NR当前行号FS输入字段分隔符三、常用基础参数-F指定字段分隔符-v自定义外部变量四、基础字段截取实战1. 截取单列、多列bash运行# 只输出第一列 awk {print $1} test.txt # 输出第1列、第3列 awk {print $1,$3} test.txt # 输出整行内容 awk {print $0} test.txt2. 指定分隔符截取文件以冒号、逗号、斜杠分割时用-F指定分隔符bash运行# 以冒号分割取第一列 awk -F: {print $1} /etc/passwd # 以逗号分割截取字段 awk -F, {print $2} data.csv3. 打印行号、字段总数bash运行# 显示行号第一列 awk {print NR,$1} test.txt # 打印每行总列数 awk {print NF} test.txt # 打印最后一列 awk {print $NF} test.txt五、条件匹配筛选1. 匹配包含指定字符串的行bash运行# 匹配包含error的行输出整行 awk /error/{print $0} app.log # 匹配包含root的行输出第一列 awk /root/{print $1} /etc/passwd2. 数值条件判断bash运行# 第二列数值大于100才输出 awk $2100{print $1,$2} num.txt # 等于、小于判断 awk $38080{print $0} port.log3. 区间行筛选bash运行# 只输出5到10行内容 awk NR5 NR10{print $0} test.txt六、格式化输出与拼接自定义输出格式拼接符号、文字bash运行# 拼接字段与文字 awk {print IP:$1,状态:$2} net.log # 固定分隔符输出 awk {print $1|$3|$5} info.txt七、BEGIN、END 预处理与收尾BEGIN{}读取文本之前执行一次END{}读取文本全部结束后执行一次bash运行# 开头打印表头结尾统计总行数 awk BEGIN{print 用户名UID}{print $1,$3}END{print 总计行数:NR} /etc/passwd八、简单统计求和bash运行# 统计第二列所有数值总和 awk {sum$2}END{print 总和sum} score.txt # 统计匹配行数 awk /200/{count}END{print 成功请求数:count} access.log九、生产高频实战案例1. Nginx 日志截取访问 IPbash运行awk {print $1} access.log2. 筛选指定端口连接bash运行netstat -ant | awk $4~/8080/{print $0}3. 过滤空行与注释行bash运行awk !/^#/ !/^$/{print $0} nginx.conf4. 统计在线客户端数量bash运行ss -tn | awk NR1{ip[$5]}END{for(i in ip)print i,ip[i]}5. 多分隔符混合截取bash运行# 同时识别空格、冒号、斜杠作为分隔 awk -F[: /] {print $4} url.log十、三剑客场景区分速记grep单纯筛选匹配行sed批量修改、删除、替换文本awk列截取、统计、计算、结构化数据分析十一、极简命令总结取列awk {print $列数}改分隔符awk -F分隔符条件过滤awk /关键词/{print}数值统计sum$列头尾处理BEGIN{}、END{}