Linux 中 awk 命令使用
🧠 基础概念
awk 是什么?
awk 是一种强大的文本处理工具,擅长格式化文本、数据提取、报表生成等。
基本结构:
awk 'pattern { action }' filename
工作方式:
- 逐行读取文本
- 每行按字段分割(默认按空格或Tab)
- 根据 pattern 匹配并执行
{action}语句块
🧱 常用语法
1️⃣ 默认变量
| 变量 | 含义 |
|---|---|
$0 |
当前整行内容 |
$1~$n |
第1到第n个字段(默认空格分隔) |
NR |
当前记录的行号(Number of Record) |
NF |
当前行的字段个数(Number of Fields) |
FS |
输入字段分隔符(默认空格) |
OFS |
输出字段分隔符(默认空格) |
🧪 使用示例
1. 打印指定字段
awk '{print $1, $3}' file.txt
2. 条件筛选行
awk '$3 > 80 {print $1, $3}' scores.txt
3. 设置字段分隔符
awk -F ':' '{print $1}' /etc/passwd
4. 输出字段用逗号分隔
awk 'BEGIN{OFS=","} {print $1, $2}' file.txt
5. 统计行数
awk 'END{print NR}' file.txt
6. 求和(如第2列数值总和)
awk '{sum += $2} END {print sum}' file.txt
7. 求平均值
awk '{sum += $2} END {print sum/NR}' file.txt
🔧 进阶功能
1. BEGIN / END 块
awk 'BEGIN{print "Start"} {print $1} END{print "Done"}' file.txt
2. 多条件匹配(if 语句)
awk '{if ($2 > 90) print $1, "优秀"}' scores.txt
3. 使用变量
awk -v threshold=60 '{if ($2 > threshold) print $1}' scores.txt
4. 正则匹配
awk '$1 ~ /test/ {print $0}' file.txt
🛠 常用技巧
打印非空行
awk 'NF > 0' file.txt
处理CSV文件(逗号分隔)
awk -F ',' '{print $2}' data.csv
替换特定字段值
awk '{$2="REPLACED"; print}' file.txt
多文件处理
awk 'FNR==1{print FILENAME} {print $0}' file1.txt file2.txt
📦 awk 脚本保存形式
可写成 .awk 文件,如 myscript.awk:
#!/usr/bin/awk -f
{
print $1, $2
}
执行:
chmod +x myscript.awk
./myscript.awk file.txt
📚 推荐练习方向
- 日志分析(如 nginx、系统日志)
- 简易报表统计
- 配合管道命令如 grep、sort、uniq
- 与 shell 脚本组合使用

浙公网安备 33010602011771号