linux系统三剑客之首awk命令

linux系统三剑客之首awk命令
最新回答
萌城少女

2021-02-01 17:35:29

AWK 是一种强大的文本处理工具,擅长逐行分析文本并按字段处理数据。其核心功能包括模式匹配、字段操作、数学运算及逻辑控制,常用于日志分析、数据提取和报表生成。以下是关键要点:

1. 基础语法与执行流程
  • 命令格式:awk [选项] '模式或条件 {操作}' 文件1 文件2 …awk -f 脚本文件禅伏 文件1 文件2 …
  • 执行流程

    BEGIN{}:处理文本前执行(如初始化变量)。

    模式匹配:逐行匹配条件(如正则表达式)。

    {}:对匹配行执行操作(如打印字段)。

    END{}:处理完所有行后执行(如统计结果)。

2. 内建变量与字段操作
  • 常用变量

    $0:整行内容。

    $1, $2…$n:第1至第n个字段。

    NF:当前行的字段数。

    NR:当前行号。

    FS:输入字段分隔符(默认空格/Tab),等价于 -F 选项。

    OFS:输出字段分隔符(默认空格)。

    FILENAME:当前文件名。

  • 字段处理示例

    awk -F ":" '{print $1, $3}' /etc/passwd # 输出用户名和UIDawk '{print NR, $0}' file.txt # 输出行号及整行内容
3. 模式匹配与条件控制
  • 正则匹配:awk '/^root/ {print}' /etc/passwd # 匹配以root开头的行awk '$7 ~ /bash/ {print $1}' /etc/passwd # 第7字段包含bash的用户名
  • 逻辑运算:awk '$3 >= 1000 && $NF == "/bin/bash" {print}' /etc/passwd # UID≥1000且shell为bash的用户awk '!(NR % 2) {print}' file.txt # 输贺扰携出偶数行
4. 数学运算与三元操作
  • 基本运算:awk '{print $1 + $2}' data.txt # 字段相加awk '{print 2^3}' # 计算2的3次方
  • 三元运算符:awk '{max = ($1 > $2) ? $1 : $2; print max}' data.txt # 输出每行较大值
5. 高级用法
  • 调用Shell命令:awk '{print | "wc -l"}' file.txt # 统计行数free -m | awk '/Mem:/ {print $3*100/($3+$4)}' # 计算内存使用百分比
  • 多文件处理:awk 'FNR == 1 {print "---", FILENAME} {print}' file1.txt file2.txt # 处理多文件时标记文件名
  • BEGIN/END示例:awk 'BEGIN {FS=":"; sum=0} {sum+=$3} END {print "UID总和:", sum}' /etc/passwd
6. 注意事项
  • 分隔符优先级:FS 变量优先级高于李野 -F 选项(如 awk 'BEGIN{FS=":"} {print $1}')。
  • getline行为

    无重定向时:读取当前文件的下一行(可能跳过行)。

    有重定向时:读取外部命令或文件的首行。

    awk '{getline < "data.txt"; print $0}' file.txt # 读取data.txt的首行
7. 实际应用场景
  • 日志分析:awk '/ERROR/ {print NR, $0}' /var/log/syslog # 提取错误行及行号
  • 数据统计:df -h | awk '//$/ {print $5}' | tr -d '%' # 提取根分区使用率
  • 格式化输出:awk -F: 'BEGIN{OFS=" | "} {print $1, $3, $6}' /etc/passwd # 自定义分隔符

总结:AWK 通过灵活的模式匹配、字段操作和流程控制,能够高效处理结构化文本。结合 BEGIN/END 块和Shell命令调用,可实现复杂的数据处理任务。掌握其内建变量和运算逻辑是提升文本处理效率的关键。