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

linux 命令 awk

awk 是 Linux/Unix 系统中一个强大的文本处理工具,尤其擅长处理结构化文本数据(如日志、表格数据)。它不仅是命令行工具,还是一种脚本语言,支持变量、条件、循环等编程特性

1. 基本语法

 awk [选项] '模式 {动作}' 文件名

  • 模式(Pattern):决定何时执行动作(如行号、正则匹配)。

  • 动作(Action):对匹配的行执行的操作(如打印、计算)。

 2. 核心概念

内置变量
变量说明
$0当前整行内容
$1, $2第1列、第2列(默认以空格分隔)
NR当前行号(从1开始)
NF当前行的列数
FS输入字段分隔符(默认空格)
OFS输出字段分隔符(默认空格)
FILENAME当前处理的文件名

常用选项
  • -F:指定输入字段分隔符(如 -F':' 以冒号分隔)。

  • -v:定义变量(如 -v var=value)。

 3. 经典用法示例

 提取特定列

# 提取文件的第一列和第三列
awk '{print $1, $3}' a.txt

# 输出时用分号分隔列
awk '{print $1 ";" $3}' a.txt

 

  过滤行

# 打印第二列大于50的行
awk '$2 > 50 {print $0}' data.txt

# 打印包含 "error" 的行(不区分大小写)
awk '/error/i {print}' log.txt

 跳过标题行

 # 从第二行开始处理(常用于CSV)
awk 'NR > 1 {print $1, $2}' data.csv

计算列总和 

 # 计算第一列的总和
awk '{sum += $1} END {print sum}' numbers.txt

 BEGIN 和 END 块

  • BEGIN:在处理输入前执行(如初始化变量)。

  • END:在处理完所有行后执行(如输出统计结果)

 # 统计文件行数并计算平均值

awk '
BEGIN {sum = 0; count = 0}
NR == 1 {next}  # 遇到第一行直接跳到下一行
{sum += $1; count++}
END {print "Average:", sum/count}
' test01.txt

 

条件语句与循环

# 根据条件处理不同列
awk '{
  if ($1 > 100) 
    print "High:", $0
  else 
    print "Low:", $0
}' values.txt

# 遍历所有列并打印偶数位置的值
awk '{for (i=1; i<=NF; i++) if (i%2==0) print $i}' file.txt

 自定义分隔符

# 根据条件处理不同列
awk '{
  if ($1 > 100) 
    print "High:", $0
  else 
    print "Low:", $0
}' values.txt

# 遍历所有列并打印偶数位置的值
awk '{for (i=1; i<=NF; i++) if (i%2==0) print $i}' file.txt

 关联数组(哈希表)

# 统计每列值的出现次数
awk '{count[$1]++} END {for (key in count) print key, count[key]}' data.txt

4. 与 cut/sed 的区别

工具核心用途优势场景
cut按列切割简单文本快速提取固定列
sed流编辑(替换、删除、插入)基于行的文本替换和过滤
awk结构化文本处理、计算、统计复杂字段处理、编程逻辑集成

5. 学习资源

  • 官方文档:GNU Awk User’s Guide

  • 在线教程awk 30分钟入门(链接)

  • 书籍推荐:《Effective Awk Programming》

http://www.dtcms.com/a/111337.html

相关文章:

  • 洛谷题单3-P1217 [USACO1.5] 回文质数 Prime Palindromes-python-流程图重构
  • eBay新规倒计时:您的店铺配送方案即将被系统默认修改
  • python如何快速删除文件夹中的大量文件
  • 内网(域)渗透测试流程和模拟测试day--5--Windows和Linux的提权
  • 通信数据记录仪-产品概念ID
  • IntelliJ IDEA 2020~2024 创建SpringBoot项目编辑报错: 程序包org.springframework.boot不存在
  • 人工智能时代人才培养的变革路径:模式创新、能力重塑与认证赋能
  • Hello Robot创新突破!Stretch3机器人搭载RUMs模型实现未知环境中“即插即用”
  • 【AI模型核心流程】(一)大语言模型输入处理机制详解与常见误解辨析
  • leetcode75.颜色分类
  • 对备忘录模式的理解
  • vulkanscenegraph显示倾斜模型(5.6)-vsg::RenderGraph的创建
  • Python 助力人工智能与机器学习的深度融合
  • Linux如何设置bash为默认shell
  • AIGC9——​AIGC时代的用户体验革命:智能交互与隐私保护的平衡术
  • Linux线程同步与互斥:【线程互斥】【线程同步】【线程池】
  • JavaScript BOM、事件循环
  • 解锁 C 语言安全新姿势:C11 安全函数全解析
  • 合肥SMT贴片制造工艺全解析
  • React编程高级主题:背压(Backpressure)处理
  • 谢志辉和他的《韵之队诗集》:探寻生活与梦想交织的诗意世界
  • 6.0 使用Qt+ OpenCV+Python加载图片
  • 【Android】界面布局-线性布局-例子
  • 【Cursor】设置语言
  • css炫酷的3D水波纹文字效果实现详解
  • 数字化三维实训室:无穿戴动作捕捉技术如何赋能体育与舞蹈
  • 木马学习记录
  • 影响RTOS实时性的因素有哪些?
  • 容器文件系统
  • 【python中级】关于Cython 的源代码pyx的说明