awk 命令详解

以下是对 awk 命令的逐步详解,结合核心原理与生活化比喻,帮助零基础用户快速上手:


📖 一、核心概念:文本处理的流水线

awk 本质
一个按行处理文本的编程工具,像工厂流水线一样逐行扫描文件,根据规则提取或修改数据。

  • 输入:文本文件(如日志、CSV)
  • 输出:筛选后的内容、统计结果或格式化文本

核心流程

读取一行
分割成字段
匹配模式?
执行动作
输出结果
结束

🔧 二、基础语法:四步上手

命令结构

awk '模式 {动作}' 文件名   # 模式决定“哪些行”,动作决定“做什么”
1. 字段分割(拆解文本)
  • 默认分割符:空格或制表符(如 Hello World$1="Hello", $2="World"
  • 自定义分割符:用 -F 指定
    awk -F':' '{print $1}' /etc/passwd  # 按冒号分割,输出用户名
    
2. 内置变量(自动计数器)
变量作用示例
$0当前整行内容awk '{print $0}' file
$1第1个字段awk '{print $1}' file
NF当前行的字段总数awk '{print $NF}' 输出最后一列
NR当前行号(从1开始)awk '{print NR, $0}' 加行号
3. 模式匹配(筛选条件)
  • 空模式:处理所有行(默认)
    awk '{print $1}' file.txt  # 每行都输出第1列
    
  • 正则匹配:筛选含关键词的行
    awk '/error/ {print $0}' log.txt  # 输出含 “error” 的行
    
  • 条件判断:按字段值筛选
    awk '$3 > 100 {print $1}' data.csv  # 第3列>100时输出第1列
    
4. 动作(执行操作)
  • 打印内容printprintf(格式化)
    awk '{printf "Name: %-10s Age: %d\n", $1, $2}' data.txt
    
  • 统计计算:求和、平均值等
    awk '{sum += $2} END {print "总和:", sum}' data.txt  # 对第2列求和
    

🚀 三、进阶技巧:高效场景

1. BEGIN/END 块(头尾处理)
  • BEGIN:预处理(如打印表头)
    awk 'BEGIN {print "Start Processing..."} {print $1}'
    
  • END:后处理(如输出统计)
    awk '{count++} END {print "总行数:", count}' file
    
2. 数组统计(词频分析)
awk '{words[$1]++} END {for(w in words) print w, words[w]}' text.txt

输出

Apple 3
Banana 2
Orange 1
3. 多文件处理
awk 'FNR==1 {print "--- 文件:", FILENAME " ---"} {print $1}' file1.txt file2.txt

🧩 四、综合案例:实战演练

场景1:分析Nginx日志
# 统计每个IP的访问次数
awk '{ip_count[$1]++} END {for(ip in ip_count) print ip, ip_count[ip]}' access.log
场景2:数据清洗CSV
# 删除第3列为空的行
awk -F',' '$3 != "" {print $0}' dirty_data.csv
场景3:生成报告
awk 'BEGIN {FS=":"; print "用户列表"} {print "用户名:", $1} END {print "------"}' /etc/passwd

💎 总结:学习路径建议

  1. 新手入门:掌握字段分割(-F)和基础打印(print $1, $NF)。
  2. 进阶提升:熟练使用模式匹配(/regex/)和统计计算(sum += $2)。
  3. 高手之路:活用数组和流程控制(if/for)解决复杂问题。

附:更多示例可参考 GNU Awk 手册,或实践命令 man awk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值