当前位置:首页>Linux>AWK 命令详解 - Linux 文本处理三剑客

AWK 命令详解 - Linux 文本处理三剑客

  • 2026-09-04 02:32:37
AWK 命令详解 - Linux 文本处理三剑客
今天我们要聊的是 Linux 文本处理三剑客中的另一位重量级选手——awk。如果说上期讲的 sed 是擅长"行"编辑的流水线工人,那 awk 就是擅长"列"处理的表格专家。它特别适合处理像成绩单、日志、CSV 这种有规律的结构化数据。

AWK 的核心逻辑:按列切割

awk 的基本工作流程是:逐行读取文本,然后按指定的分隔符(默认是空格)把每一行切分成若干列(字段)。切分后,你可以精准地对第 1 列、第 2 列进行操作。

基本语法

awk 'pattern {action}' filename

参数说明

  • pattern(模式):可选。用来筛选行(如 $2 > 60 表示第二列大于 60 的行)。

  • action(动作):对筛选出的行执行的操作(最常用的是 print)。

关键变量符号

符号含义
$1代表第一列
$2代表第二列
$0代表整行
NR当前行号
NF当前行的列数

教师办公实战场景

示例数据文件 score.txt

张三 数学 85李四 数学 92王五 数学 78

场景 1:快速提取特定列(制作名单)

你只需要所有学生的姓名(第一列),不需要科目和分数:

awk'{print $1}' score.txt

输出:

张三李四王五

💡 解析:{print $1} 表示对每一行,只打印第一列的内容。


场景 2:自定义分隔符(处理 CSV/表格)

如果你的数据是用逗号分隔的(如 Excel 导出的 CSV):

awk-F',''{print $1, $3}' data.csv

💡 解析:-F',' 参数告诉 awk 使用逗号作为分隔符,而不是默认的空格。


场景 3:条件筛选(找出及格的学生)

假设第三列是分数,你想筛选出及格(≥60)的学生:

awk'$3 >= 60 {print $1, "及格"}' score.txt

💡 解析:$3 >= 60 是条件,只有满足该条件的行,才会执行后面的打印动作。


场景 4:简单统计(计算平均分)

想快速知道班级平均分,不用打开 Excel:

awk'{sum += $3} END {print "平均分:", sum/NR}' score.txt

💡 解析:sum += $3 累加第三列分数;END 是在处理完所有行后执行,NR 是总行数。


AWK 与 SED 的选用指南

很多同学会混淆 awk 和 sed,记住这个原则:

工具使用场景
sed当你需要对文本内容进行查找、替换、删除(如把"错误"替换为"警告"),或者进行整行的插入、追加操作时。
awk当你面对的是表格状数据,需要按列提取、统计、计算(如提取日志中的 IP 地址、计算成绩总和)时。

今日小结

awk 的核心就是"列"。记住 -F 设置分隔符,$1 代表第一列,$NF 代表最后一列,你就能解决 80% 的日常数据处理问题。

下次当你拿到一堆杂乱无章的日志或数据文件时,别再手动复制粘贴了,试试 awk 吧!

如果你有特别想学的某个命令,欢迎在评论区留言。我们下期见!


最新文章

随机文章