分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程​​​​​https://www.captainai.net/troubleshooter

awk 是 Linux/Unix 下功能极其强大的文本处理编程语言,核心是按行读取、按字段分割、模式匹配、数据计算与格式化输出,是 Shell 三剑客(grep/sed/awk)中最擅长结构化数据解析、统计报表的工具。

一、基本语法

awk [选项] '模式 { 动作 }' 文件名
  • 选项

    • -F '分隔符':指定字段分隔符(默认空格 / 制表符)
      • 例:-F:(冒号)、-F,(逗号)、-F '[:;]'(冒号或分号)
    • -v 变量=值:定义外部变量
      • 例:awk -v num=100 '{print $1+num}'
    • -f 脚本.awk:从文件读 awk 脚本
  • 模式(筛选条件)

    • 省略:处理所有行
    • /正则/:匹配包含正则的行
      • 例:/error/、/^root/、/[0-9]+/
    • NR==5:第 5 行
    • $3 > 100:第 3 字段 > 100
    • BEGIN{}:处理前执行(初始化、表头)
    • END{}:处理完所有行后执行(统计、汇总)
  • 动作

    • print $1, $3:打印第 1、3 字段
    • $2="OK":修改第 2 字段
    • 支持:if/else、for、数组、数学运算

二、核心内置变量

  • $0:当前整行
  • $1, $2, ... $NF:第 1/2 / 最后 1 字段
  • NR:当前行号(Number of Record)
  • NF:当前行字段总数(Number of Field)
  • FS:字段分隔符(同 -F)
  • OFS:输出字段分隔符(默认空格)

三、高频实用示例(必掌握)

1. 提取列(最常用)
# 打印第1、3列(默认空格分隔)
awk '{print $1, $3}' data.txt

# 冒号分隔(/etc/passwd):用户名、家目录
awk -F: '{print $1, $6}' /etc/passwd

# 打印最后一列
awk '{print $NF}' file.txt

# 打印倒数第二列
awk '{print $(NF-1)}' file.txt
2. 条件过滤
# 包含root的行
awk '/root/' /etc/passwd

# 第3列>30,打印整行
awk '$3>30' data.txt

# 行号2~5行
awk 'NR==2,NR==5' file.txt
3. 统计计算
# 统计文件行数
awk 'END{print NR}' file.txt

# 第3列求和(如日志大小)
awk '{sum+=$3} END{print "总和:", sum}' access.log

# 统计每个IP出现次数(Nginx日志)
awk '{ip[$1]++} END{for(i in ip) print i, ip[i]}' access.log
4. BEGIN/END 报表
awk -F, '
BEGIN {
    print "日期   产品   金额"
    print "-------------"
}
NR>1 {  # 跳过表头
    sum += $3
    print $1, $2, $3
}
END {
    print "-------------"
    print "总金额:", sum
}' sales.csv
5. 字符串替换 / 修改
# 第2列改为大写
awk '{$2=toupper($2)} 1' file.txt  # 1=默认print

# 替换整行中old为new
awk '{gsub(/old/, "new")} 1' file.txt

四、与 sed/grep 对比

  • grep:行级过滤(找包含关键字的行)
  • sed:行级编辑(替换、删除行)
  • awk:字段级处理 + 计算 + 报表(最全能)

五、简单脚本写法

report.awk:

#!/bin/awk -f
BEGIN { FS=":"; print "用户列表" }
{ print NR, $1 }
END { print "总数:", NR }

执行:

chmod +x report.awk
./report.awk /etc/passwd

一句话总结:awk 把文本当表格用,$1/$2 取列、NR 取行、BEGIN/END 做头尾,过滤、计算、格式化一气呵成。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐