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

【Linux】awk 命令详解及使用示例:结构化文本数据处理工具

【Linux】awk 命令详解及使用示例:结构化文本数据处理工具

引言

awk 是一种强大的文本处理工具和编程语言,专为处理结构化文本数据而设计。它的名称来源于其三位创始人的姓氏首字母:Alfred Aho、Peter Weinberger 和 Brian Kernighan。

基本功能

  1. 文本分析:按列/字段处理结构化文本数据
  2. 模式匹配:根据条件筛选文本
  3. 数据处理:支持算术运算和字符串操作
  4. 报表生成:格式化输出结果

工作原理

  1. awk 逐行读取输入
  2. 将每行按分隔符(默认是空格)分割为字段
  3. 对每行应用模式匹配和操作
  4. 输出处理结果

内置变量

  • $0 - 当前整行内容
  • $1, $2, … - 第1个、第2个…字段
  • NF - 当前行的字段数
  • $NF - 最后一个字段
  • NR - 当前处理的行号
  • FNR - 当前文件中的行号
  • FS - 输入字段分隔符(默认为空白字符)
  • OFS - 输出字段分隔符
  • RS - 输入记录分隔符(默认为换行符)
  • ORS - 输出记录分隔符
  • FILENAME - 当前输入文件名

常用选项

  • -F 分隔符 - 指定输入字段分隔符
  • -v var=值 - 设置变量
  • -f 脚本文件 - 从文件读取awk脚本

程序结构

awk程序可以包含三部分:

  • BEGIN { ... } - 在处理文本前执行
  • pattern { action } - 对匹配的每一行执行
  • END { ... } - 在处理完所有文本后执行
awk 'BEGIN {print "开始处理"} {sum += $1} END {print "总和:", sum}' data.txt

控制结构

awk支持常见的编程语言控制结构:

  • 条件:if-else
  • 循环:for, while, do-while
  • 分支:switch
# 使用if条件
awk '{if ($1 > 10) print "大于10:", $0; else print "小于等于10:", $0}' file.txt# 使用for循环
awk '{for(i=1; i<=3; i++) print $i}' file.txt

内置函数

awk提供了丰富的内置函数:

  • 数学函数:sqrt(), sin(), rand()
  • 字符串函数:length(), substr(), index(), match()
  • 时间函数:systime(), strftime()
  • 其他函数:gsub(), system()

使用示例

  • 利用awk命令获取查看用户为root的进程PID信息
ps aux | awk '$1=="root" {print $2}'

  • 利用列出/bin目录下连接文件的创建日期或者是最近的修改日期
ls -l /bin | awk '/^l/ {print $6, $7, $8}'

  • 利用awk指令设置变量a=1,b=3并查找/etc目录下连接文件中第 a , a, ab列的字符信息
ls -l /etc | awk '/^l/ {a=1; b=3; print $a, $b}'

  • 利用awk列出/bin目录下连接文件的权限信息(使用substr内置函数)
ls -l /bin | awk '/^l/ {print substr($1, 1, 10)}'

  • 利用awk命令在/etc/passwd文件中显示以:作为分隔的第1列的数据
awk -F: '{print $1}' /etc/passwd

  • 利用awk命令在/etc/passwd文件中第一个"/“符号前面的字段变为"unknown”
awk -F/ '{$1="unknown"; print}' OFS=/ /etc/passwd

参考资料

  • https://www.runoob.com/linux/linux-comm-awk.html

相关文章:

  • boost::qvm 使用示例
  • FineReport模板认证找不到模板
  • 逻辑卷和硬盘配额(补充)
  • GT接收端共模电压
  • 永磁同步电机控制算法--模糊PI转速控制器
  • Spring Cloud核心组件深度解析(2025终极指南)
  • nuScenes 数据集及同类型自动驾驶数据集介绍
  • vcs仿真产生fsdb波形的两种方式
  • 关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
  • Cesium添加图片标记点、glb模型
  • 【机械视觉】Halcon—【十一、车牌检测和筛子检测】
  • 爱普生差分晶振SG2016HHN精准医疗的时钟保障
  • 软件验收报告对企业的重要性
  • 5G网络中频段的分配
  • MySQL 高级学习篇
  • C++.OpenGL (4/64)纹理(Texture)
  • 智能对联网页小程序的仓颉之旅
  • Linux 内核性能分析确保成效的关键知识点总结
  • Android端口转发
  • DTS 数据迁移
  • 网站开发慕枫/百度关键词优化词精灵
  • asp学校网站系统/网络营销课程设计
  • 电子商务的网站建设分析/免费建站的平台
  • 画册欣赏网站/徐州seo外包
  • 宝塔windows建设网站/推广普通话的内容简短
  • 想自己做淘宝有什么网站吗/西安seo网站建设