在数据处理的世界里文本处理是程序员和系统管理员日常工作中不可或缺的一部分。面对海量日志、复杂配置文件或格式化数据时如何快速提取、转换和过滤信息成为关键技能。而Unix/Linux系统中的awk和sed正是为高效文本处理而生的两大利器。它们凭借轻量级、高灵活性和强大的正则表达式支持成为命令行下的瑞士军刀。本文将带你探索如何用这两款工具提升文本处理效率。文本行快速过滤awk和sed最基础的功能是按条件筛选文本行。例如用sed -n /error/p logfile可快速提取含error的行而awk $3 100 {print} data.txt则能筛选第三列数值大于100的记录。通过结合正则表达式和字段比较无需编写复杂脚本即可完成大多数过滤需求特别适合日志分析和数据清洗场景。字段处理与重组awk的字段分割能力尤为突出。假设有一个以逗号分隔的CSV文件使用awk -F, {print $1,$3}可立即提取第1、3列数据。更复杂的操作如计算列平均值awk {sum$2} END{print sum/NR}或重组输出格式awk {printf 用户:%s 得分:%d\n,$1,$4}都能用单行命令实现大幅减少临时文件或中间处理步骤。批量文本替换sed的流编辑特性使其成为批量替换的理想工具。经典用法如s/old/new/g可全局替换文本而结合正则表达式能实现更精细的修改。例如sed s/\([0-9]\{3\}\)-\([0-9]\{4\}\)/(\1)\2/ phone.txt可将123-4567格式电话改写为(123)4567。通过-i参数直接修改原文件特别适合批量更新配置文件或代码中的版本号等场景。多文件关联处理awk支持同时处理多个文件并建立关联。例如用awk NRFNR{a[$1]$2;next} {print $0,a[$1]} file1 file2可将两个文件按共同键值合并类似简易版数据库JOIN操作。这种能力在合并日志、对比数据差异时尤为实用避免了手动拼接文件的繁琐。复杂逻辑与统计当需要条件分支或统计时awk的编程特性大放异彩。例如分析HTTP日志时可用awk {status[$9]} END{for(s in status)print s,status[s]}快速统计各状态码出现次数。其内置的数学函数和数组支持使得计算百分位、排序输出等复杂操作也能简洁表达远超单纯正则工具的能力边界。掌握awk和sed的组合使用能让你在命令行中完成90%的文本处理任务。它们虽然诞生于上世纪但因其符合Unix单一职责哲学至今仍是高效处理文本数据的首选方案。通过本文介绍的核心技巧读者可立即应用于实际工作体验从原始数据到结构化信息的快速转化。更深入的学习方向包括掌握更多内置变量如FS、OFS、理解模式空间与保持空间的区别以及将处理结果通过管道与其他命令协作。