Excel 卡死的一万行,awk 一行秒处理
$1 $2 是第几列),sed 按行替换(s/old/new/g),组合管道能在一行命令里干完 Excel 干不了的活:求和、去重、筛选、替换、统计。不会 awk/sed,你只能开 Excel 拖鼠标;会了,一行命令顶半小时。
很多人把 awk 当"高级 grep"用,其实它是一门完整的编程语言,有变量、循环、函数、条件。只是它被设计成"一行就能写完一个程序"。
比如 awk '{sum+=$1} END{print sum}' 是一个完整程序:对每行把第一列加到 sum,最后打印 sum。这就是一行命令求一万个数的和——Excel 要导入、写公式、下拉,awk 一行。再如 awk -F, '{print $2}' 按逗号切 CSV 取第二列,awk 'NR>1' 跳过表头。awk 的核心心智模型是"每行自动循环 + 列号引用",理解这条,剩下的都是语法糖。
下面是一份访问日志,三关递进:从"取某列"到"求和"到"替换+排序"。从备选词拼管道,看输出对不对。
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。
awk/sed 真正的威力在管道组合。几个经典一行命令:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head——统计 IP 访问量 Top10。sed -n '10,20p' file——只看第 10-20 行(不用 head/tail 拼)。awk -F, 'NR>1 && $3>100 {print $1,$3}' data.csv——CSV 筛选第三列大于100的行。sed 's/ */ /g' file | awk '{print $NF}'——压缩多空格再取最后一列。这些命令的共同模式:cat/输入 → 处理(awk/sed/cut)→ 排序去重统计(sort/uniq)→ 输出。Unix 哲学的"每个工具做一件事,管道串联"在这里发挥到极致。学会这套组合,你处理日志的速度会比开 Excel 的人快一个数量级——而且能写进脚本自动跑,不用每次手动点。