awk
和 sed
是 Linux/Unix 中两个经典的文本处理工具,虽然它们都用于处理文本数据,但设计理念和适用场景有显著区别。以下是它们的核心对比:
sed
(Stream Editor)
awk
(Aho, Weinberger, Kernighan)
特性 | sed |
awk |
---|---|---|
处理单位 | 按行处理 | 按行处理,但可分割为字段(列) |
字段分割 | 无原生字段概念 | 自动按分隔符(默认空格/TAB)分列 |
编程能力 | 有限(仅支持简单命令) | 强大(支持变量、条件、循环、函数等) |
语法复杂度 | 简单(命令式) | 较复杂(类似C语言) |
sed
的典型操作# 替换文本(全局替换)
sed 's/old/new/g' file.txt
# 删除空白行
sed '/^$/d' file.txt
# 在匹配行后插入文本
sed '/pattern/a\new line' file.txt
awk
的典型操作# 打印第一列和第三列
awk '{print $1, $3}' file.txt
# 对第二列求和
awk '{sum += $2} END {print sum}' file.txt
# 按条件过滤行(如第2列大于100)
awk '$2 > 100 {print $0}' file.txt
维度 | sed |
awk |
---|---|---|
数据视角 | 行(无字段概念) | 行+字段(列) |
替换能力 | 强大(正则替换) | 支持但不如sed 直接 |
计算能力 | 不支持 | 支持数学运算、统计 |
复杂度 | 适合简单编辑 | 适合复杂逻辑处理 |
用 sed
如果:
用 awk
如果:
组合使用:
两者可通过管道结合(如先sed
清理数据,再awk
分析):
sed 's/#.*//' file.txt | awk '{print $1}'
sed
:文本编辑器,擅长修改文本。awk
:微型编程语言,擅长分析结构化文本。