为什么程序员都爱用AWK?
在Linux系统管理和数据处理中,AWK是一个被严重低估的神器。它能用一行代码完成Excel表格的复杂操作,甚至能直接分析百万行日志!无需Python脚本,不用打开笨重的软件,跟着本文快速掌握它的核心用法!
一. 什么是AWK?
AWK是一种文本处理编程语言,名字取自三位创始人姓氏的首字母。它擅长对结构化文本(如日志、CSV、配置文件)进行逐行扫描、切割、计算和格式化输出。
核心特点:
- 无需编译,直接命令行运行
- 内置字段分割、变量、循环和函数
- 支持正则表达式匹配
二. AWK基础:一行代码搞定数据提取
场景:假设有一个文件data.txt,内容如下:
Alice 95 88
Bob 78 92
Charlie 85 90
需求:提取第一列(姓名)和第三列(分数)
命令:
awk '{print $1 " - 分数: " $3}' data.txt
输出:
Alice - 分数: 88
Bob - 分数: 92
Charlie - 分数: 90
三. 高级技巧:统计、计算、过滤一键完成
① 按条件过滤数据
找出第二列分数大于90的行
awk '$2 > 90 {print $1 " 高分!"}' data.txt
② 自动求和与统计
计算第三列的总分
awk '{sum += $3} END {print "总分:" sum}' data.txt
③ 自定义分隔符
处理CSV文件(逗号分隔)
awk -F',' '{print $2}' data.csv
四. 真实应用场景
场景1:分析Nginx日志
统计访问量前10的IP地址
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
场景2:快速生成报表
计算每个部门的平均工资
awk -F',' '{sum[$2] += $3; count[$2]++}
END {for(dept in sum) print dept " 平均工资:" sum[dept]/count[dept]}' salary.csv
五. 为什么说AWK是“瑞士军刀”?
- 轻量级:无需打开文件,直接命令行处理
- 高性能:处理百万行数据仅需几秒
- 灵活性:支持复杂逻辑(甚至能写小型计算器!)
动手练习
复制以下命令到终端试试吧!
- 显示当前目录下文件的大小(MB)
ls -l | awk '{print $9 ": " $5/1024/1024 " MB"}'
- 统计代码行数(排除空行)
awk 'NF {count++} END {print "有效代码行数:" count}' main.c
总结
AWK的潜力远不止于此!它支持数组、内置函数、正则表达式,甚至能调用系统命令。掌握它,你将在数据分析、日志处理、报表生成等场景中游刃有余!