玩转 AWK:一个高效处理文本的利器
在 Linux 的世界里,有许多工具可以用来处理文本,但要论“优雅”和“强大”,AWK 绝对榜上有名。无论是分析日志、处理 CSV 文件,还是提取结构化数据,AWK 都是你的好帮手。
今天,我们就来深入浅出地聊聊 AWK 的基础用法,以及如何通过它在工作中如鱼得水!
一、AWK 是什么?
AWK 是一个面向文本处理的编程语言,名字来源于它的三位发明者:Aho、Weinberger 和 Kernighan(没错,就是写《The C Programming Language》的 Kernighan!)。
它的核心功能是逐行处理文本,支持模式匹配和数据操作,可以看作是一个“迷你编程语言”。
二、AWK 的工作原理
-
逐行读取输入
AWK 将文本文件或标准输入逐行处理,每次处理一行。 -
基于模式匹配
每行数据会与指定的模式进行匹配。 -
执行操作
如果匹配成功,执行对应的操作。
一句话总结:“匹配模式 -> 执行动作”。
三、AWK 的语法结构
AWK 的基本命令格式如下:
awk 'pattern {action}' file
pattern
:匹配条件(可以是正则表达式、关系运算等)。{action}
:对匹配到的行执行的操作。file
:输入文件(也可以通过管道传入)。
四、AWK 的常用变量
在 AWK 中,每一行会被拆分为多个字段,可以通过内置变量访问这些字段:
$0
:当前行的全部内容。$1, $2, ...
:当前行的第 1、2、… 个字段。NR
:当前行号(Number of Record)。NF
:当前行的字段数(Number of Fields)。
例如,以下是一个 CSV 文件 data.csv
:
张三,25,程序员
李四,30,设计师
王五,22,测试工程师
运行命令:
awk -F',' '{print $1, $3}' data.csv
结果输出:
张三 程序员
李四 设计师
王五 测试工程师
这里:
-F','
指定逗号为字段分隔符。$1
和$3
分别代表第 1 和第 3 列。
五、AWK 的常用操作
1. 打印指定字段
awk '{print $1, $3}' file.txt
输出文件中每行的第 1 和第 3 个字段。
2. 基于条件筛选
awk '$2 > 25 {print $1, $2}' data.csv
输出第 2 列值大于 25 的行。
3. 统计字段数
awk '{print NR, NF}' file.txt
输出每行的行号和字段数。
4. 文本替换
awk '{gsub("张三", "小张"); print}' file.txt
将文本中的“张三”替换为“小张”。
5. 字段求和
假设有一个文件 numbers.txt
,内容如下:
5 10
3 7
8 2
运行命令:
awk '{sum += $1} END {print "Sum:", sum}' numbers.txt
输出:
Sum: 16
这里,END
块在所有行处理完后执行,用于输出最终结果。
六、结合实际案例
案例 1:日志分析
假设有一个 Web 服务器访问日志 access.log
:
192.168.1.1 - - [09/Jan/2025:12:00:01] "GET /index.html HTTP/1.1" 200 1024
192.168.1.2 - - [09/Jan/2025:12:00:02] "GET /about.html HTTP/1.1" 404 512
统计每种 HTTP 状态码出现的次数:
awk '{status[$9]++} END {for (code in status) print code, status[code]}' access.log
输出:
200 1
404 1
案例 2:处理 CSV 文件
假设有一个学生成绩文件 scores.csv
:
张三,80,90,85
李四,75,85,88
王五,92,88,95
计算每个学生的总分:
awk -F',' '{sum = $2 + $3 + $4; print $1, sum}' scores.csv
输出:
张三 255
李四 248
王五 275
案例 3:过滤大文件
快速筛选包含关键字的行:
awk '/error/ {print}' large_log.txt
输出包含“error”的所有行。
七、AWK 的高级用法
1. 脚本文件
将 AWK 脚本保存为文件,例如 script.awk
:
BEGIN {FS=","; print "学生 总分"}
{
sum = $2 + $3 + $4
print $1, sum
}
END {print "处理完成"}
运行脚本:
awk -f script.awk scores.csv
2. 结合 Shell 变量
threshold=90
awk -v th=$threshold '$2 > th {print $1, $2}' scores.csv
传入 Shell 变量作为条件。
八、总结
AWK 是一个灵活、高效的文本处理工具,尤其适合处理结构化或半结构化数据。它的学习曲线较低,但功能非常强大,无论是写简单的命令还是复杂的脚本,都可以轻松应对。
适用场景:
- 快速查看和过滤文件内容。
- 批量处理日志或数据文件。
- 自动化报表生成。
学会 AWK,你会发现它不仅是工具箱中的“瑞士军刀”,还是一把“魔法钥匙”,能帮你打开文本处理的无限可能!
标签:txt,sum,利器,awk,玩转,print,AWK,csv From: https://blog.csdn.net/weixin_42587823/article/details/145088395