Linux三剑客:awk
释怀爱编程
2026年02月22日 22:18
收录于文集
共2篇

当日志里一行有十几个字段,你只想要其中一列怎么办?

grep 只能筛选行,但 awk 可以按列处理。


🧠 awk 是什么


awk 的核心就一句话:

按列处理文本。

简单来说awk就是把文件逐行的读入,

以空格为默认分隔符将每行切片,

切开的部分再进行各种分析处理,

因为切开的部分使用awk可以定义变量,运算符, 使用流程控制语句进行深度加工与分析

创始人 Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan awk由来是姓氏的首字母


默认用空格作为分隔符。

echo "Tom 20" | awk '{print $1}'

讲解:

• $1 = 第一列

• $2 = 第二列

• $0 = 整行

再来:

echo "Tom 20" | awk '{print $2}'

一句总结:

awk = 行过滤 + 列提取。

🔢 按列提取文件

准备测试文件:

cat test.txt

内容:

代码块
PlainText
自动换行
复制代码
Tom 20
Jack 25
Lucy 18
复制成功

提取姓名:

awk '{print $1}' test.txt

提取年龄:

awk '{print $2}' test.txt

awk 天然适合做结构化数据处理。


⚙️ 条件判断 + 内置变量

awk 不只是取列,它还能加条件。

只显示年龄大于 20:

awk '$2 > 20 {print $1}' test.txt

• 条件写前面

• 动作写花括号里


常用内置变量:

NR = 行号

NF = 当前行列数

示例:

awk '{print NR, $0}' test.txt

统计总行数:

awk 'END {print NR}' test.txt

一句话总结:

awk 自带统计能力。


🚀 实战案例

场景:从系统用户文件中提取用户名。

系统文件:

head -3 /etc/passwd

你会发现是用冒号分隔。

指定分隔符:

awk -F: '{print $1}' /etc/passwd

讲解重点:

• -F 指定分隔符

• $1 提取用户名字段


这才是 awk 在真实运维中的用法。

切割ip

切割IP

ifconfig | awk '/broadcast/{print}' | awk -F " " '{print $2}'

运行效果

🎯 总结

总结一下:

awk 的核心是按列处理文本,

加条件筛选,

还能统计数据。