当前位置: 首页 > news >正文

Linux awk 数据分析、字段截取实战

一、awk 简介

awk 是 Linux文本三剑客之一,擅长按列截取、统计计算、格式化输出、日志数据分析,默认以空格 / 制表符分割字段,处理结构化日志、表格类文本效率极高。

核心特点

  1. 按行读取文本,逐行拆分字段处理
  2. 默认字段分隔符空格,可自定义分隔符
  3. 支持变量、判断、循环、数值运算
  4. 常用于截取 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.txt

2. 指定分隔符截取

文件以冒号、逗号、斜杠分割时,用-F指定分隔符

bash

运行

# 以冒号分割,取第一列 awk -F: '{print $1}' /etc/passwd # 以逗号分割截取字段 awk -F, '{print $2}' data.csv

3. 打印行号、字段总数

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/passwd

2. 数值条件判断

bash

运行

# 第二列数值大于100才输出 awk '$2>100{print $1,$2}' num.txt # 等于、小于判断 awk '$3==8080{print $0}' port.log

3. 区间行筛选

bash

运行

# 只输出5到10行内容 awk 'NR>=5 && NR<=10{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 日志截取访问 IP

bash

运行

awk '{print $1}' access.log

2. 筛选指定端口连接

bash

运行

netstat -ant | awk '$4~/8080/{print $0}'

3. 过滤空行与注释行

bash

运行

awk '!/^#/ && !/^$/{print $0}' nginx.conf

4. 统计在线客户端数量

bash

运行

ss -tn | awk 'NR>1{ip[$5]++}END{for(i in ip)print i,ip[i]}'

5. 多分隔符混合截取

bash

运行

# 同时识别空格、冒号、斜杠作为分隔 awk -F'[: /]' '{print $4}' url.log

十、三剑客场景区分速记

  • grep:单纯筛选匹配行
  • sed:批量修改、删除、替换文本
  • awk:列截取、统计、计算、结构化数据分析

十一、极简命令总结

  1. 取列:awk '{print $列数}'
  2. 改分隔符:awk -F分隔符
  3. 条件过滤:awk '/关键词/{print}'
  4. 数值统计:sum+=$列
  5. 头尾处理:BEGIN{}END{}
http://www.cnnetsun.cn/news/2518575.html

相关文章:

  • 思源黑体TTF构建指南:免费商用多语言字体的终极解决方案
  • NotebookLM高效工作流构建:从零到精通的7步实战框架(附真实项目复盘数据)
  • 如何快速掌握Windows本地实时语音转文字:TMSpeech完整教程
  • 曝OpenAI日亏超5亿,但Anthropic快盈利了
  • 如何用Magpie解决Windows窗口模糊问题:免费窗口超分辨率工具终极指南
  • Blender 3MF插件:实现CAD到3D打印的无缝转换完整指南
  • C++学习笔记23:const 成员函数
  • 3分钟让Figma说中文:设计师必备的汉化插件完全指南
  • 无SDK环境下如何使用curl命令调试Taotoken大模型接口
  • 3PEAK思瑞浦 TP6002-FR DFN2X2-8 运算放大器
  • 软件测试的缺陷管理:这4个工具+5个流程,让你的缺陷管理更高效
  • 让 AI Agent 更可靠:Harness Engineering 与多 Agent 系统工程实践
  • 2026年图片去水印软件哪个好用?盘点当前值得收藏的去水印工具
  • 千问 LeetCode 2565. 最少得分子序列 Java实现
  • 千问 LeetCode 2569. 更新数组后处理求和查询 Java实现
  • 观察taotoken在多模型间自动路由的响应速度与成功率
  • 基于Python + LLM的AI导演系统设计与实现
  • 6款论文降AIGC工具亲测:AI痕迹彻底消失,这款便宜又好用
  • AI写作辅助软件的合规秘籍:如何界定“合理使用”与学术不端?
  • awesome-canvas进阶技巧:Canvas与WebGL结合开发高性能图形应用
  • easy-vibe 核心功能解析:解锁 Vibe Coding 的终极技巧
  • CANN/cannbot-skills Git差异统计
  • CANN/asc-devkit浮点转hif8 API
  • 如何通过3个步骤快速掌握Java反编译界面定制:终极指南
  • PHP版本管理的终极解决方案:3分钟掌握phpenv多版本切换技巧
  • B站直播神器:神奇弹幕全方位操作指南
  • H5P交互式视频制作终极指南:快速创建引人入胜的互动学习内容
  • 中小团队如何利用 Taotoken 统一管理多模型 API 密钥与成本
  • 一天一个开源项目(第108篇):Andrej Karpathy Skills - 用一个 CLAUDE.md 文件修复 LLM 编码的四个顽疾
  • 免费图片去水印工具有哪些?2026 在线图片去水印软件推荐指南