编程与开发 · 第 12 期

awk/sed,一行命令处理一万行

Excel 卡死的一万行,awk 一行秒处理

Excel 打开一万行就卡,awk 一行命令秒处理。awk 按列处理($1 $2 是第几列),sed 按行替换(s/old/new/g),组合管道能在一行命令里干完 Excel 干不了的活:求和、去重、筛选、替换、统计。不会 awk/sed,你只能开 Excel 拖鼠标;会了,一行命令顶半小时。
⏱ 约 10 分钟 🎯 处理日志/CSV 但只会 Excel 的人 📦 源:linux-command §3

01一个反共识:awk 是一门语言,不是命令

很多人把 awk 当"高级 grep"用,其实它是一门完整的编程语言,有变量、循环、函数、条件。只是它被设计成"一行就能写完一个程序"。

awk '模式 { 动作 }' 文件
# 每行匹配模式就执行动作,模式可省(对所有行),动作可省(打印整行)

比如 awk '{sum+=$1} END{print sum}' 是一个完整程序:对每行把第一列加到 sum,最后打印 sum。这就是一行命令求一万个数的和——Excel 要导入、写公式、下拉,awk 一行。再如 awk -F, '{print $2}' 按逗号切 CSV 取第二列,awk 'NR>1' 跳过表头。awk 的核心心智模型是"每行自动循环 + 列号引用",理解这条,剩下的都是语法糖。

awk 是一门语言,
不是一条命令。
灏天文库 · 编程与开发 P.36

02文本处理闯关:拼 awk/sed 管道

下面是一份访问日志,三关递进:从"取某列"到"求和"到"替换+排序"。从备选词拼管道,看输出对不对。

🔧 awk/sed 管道闯关
点备选词拼管道,点管道里的词移除。三关递进。
← 拼好管道点运行

03sed 的精髓:地址 + 命令

sed 比 awk 简单,核心是"地址 + 命令":地址决定对哪些行操作,命令决定做什么。地址可以是行号(3d 删第3行)、范围(1,5d 删1-5行)、正则(/err/d 删含 err 的行)。命令最常用 s/old/new/g(替换)和 d(删除)。

最经典的坑:不加 g 只替换每行第一个。sed 's/a/X/' 一行有3个 a 只换第一个,sed 's/a/X/g' 才全换。另一个坑是 -i 原地改文件没有备份——sed -i 's/.../' file 直接改原文件,改错了没救。稳妥写法 sed -i.bak 会留个 .bak 备份。生产环境改配置,永远先 -i.bak。

sed 不加 g 只换第一个,
-i 不加 .bak 没救。
灏天文库 · 编程与开发 P.37

04管道组合:一行命令顶半小时

awk/sed 真正的威力在管道组合。几个经典一行命令:

这些命令的共同模式:cat/输入 → 处理(awk/sed/cut)→ 排序去重统计(sort/uniq)→ 输出。Unix 哲学的"每个工具做一件事,管道串联"在这里发挥到极致。学会这套组合,你处理日志的速度会比开 Excel 的人快一个数量级——而且能写进脚本自动跑,不用每次手动点。

05带走这套清单

✅ awk/sed 6 条可执行规则

  1. awk 是一门语言,核心心智模型是"每行自动循环 + $N 列号引用"。
  2. awk '{sum+=$1} END{print sum}' 一行求和,比 Excel 快一个数量级。
  3. sed 的精髓是"地址 + 命令":行号/范围/正则定位,s/d 操作。
  4. sed s 不加 g 只换每行第一个;-i 不加 .bak 改错没救。
  5. 经典组合:awk 取列 → sort 排序 → uniq -c 统计 → head 取前 N。
  6. 处理日志先 awk/sed 一行试,写进脚本自动跑,别每次开 Excel。
会 awk/sed 的人,
一行命令顶半小时。
灏天文库 · 编程与开发 P.38