Linux 下的 AWK 命令详细指南与示例

目录

    • 简介
    • [AWK 的主要特性](#AWK 的主要特性)
    • 基本语法
    • 示例
      • [1. 打印文件的所有行](#1. 打印文件的所有行)
      • [2. 打印特定字段](#2. 打印特定字段)
      • [3. 打印匹配模式的行](#3. 打印匹配模式的行)
      • [4. 基于条件过滤并打印](#4. 基于条件过滤并打印)
      • [5. 使用内置变量](#5. 使用内置变量)
      • [6. 执行算术运算](#6. 执行算术运算)
      • [7. 字符串操作](#7. 字符串操作)
      • [8. 使用 BEGIN 和 END 块](#8. 使用 BEGIN 和 END 块)
      • [9. 处理分隔符文件](#9. 处理分隔符文件)
    • 高级功能
    • 总结

简介

AWK 是 Linux 中功能强大的文本处理工具,用于模式扫描和处理。AWK 以其创建者(Aho、Weinberger 和 Kernighan)的名字命名,特别适合处理如日志、CSV 文件或配置文件等结构化文本数据。本指南全面讲解了 AWK 的功能,并通过实际示例展示其强大之处。

AWK 的主要特性

  • 模式匹配:处理文件中符合特定模式的行。
  • 字段操作:轻松访问和操作结构化文本中的特定字段。
  • 算术运算:在命令中直接执行计算。
  • 内置函数:支持字符串处理、数学运算等多种功能。
  • 可移植性:适用于大多数类 Unix 系统。

基本语法

bash 复制代码
awk 'pattern {action}' filename
  • pattern:决定是否对某行执行动作的条件。
  • action:指定对匹配行执行的代码块。
  • filename:要处理的输入文件。

示例

1. 打印文件的所有行

bash 复制代码
awk '{print}' file.txt

此命令打印 file.txt 的所有行。{print} 操作适用于每一行。

2. 打印特定字段

AWK 使用 $1$2 等表示一行中的字段。

bash 复制代码
awk '{print $1, $3}' file.txt

打印 file.txt 每行的第一和第三字段。

3. 打印匹配模式的行

bash 复制代码
awk '/pattern/' file.txt

打印包含"pattern"的行。

4. 基于条件过滤并打印

bash 复制代码
awk '$3 > 50 {print $1, $3}' file.txt

打印第三字段大于 50 的行的第一和第三字段。

5. 使用内置变量

  • NR:当前记录(行)的编号。
  • NF:当前记录中的字段数量。
bash 复制代码
awk '{print NR, NF, $0}' file.txt

打印行号、字段数和整行内容。

6. 执行算术运算

bash 复制代码
awk '{sum += $3} END {print "Total:", sum}' file.txt

计算并打印所有行的第三字段的总和。

7. 字符串操作

bash 复制代码
awk '{print toupper($1)}' file.txt

将每行的第一个字段转换为大写。

8. 使用 BEGIN 和 END 块

bash 复制代码
awk 'BEGIN {print "Start Processing"} {print $0} END {print "End Processing"}' file.txt
  • BEGIN 块在处理任何行之前执行。
  • END 块在处理完所有行后执行。

9. 处理分隔符文件

默认情况下,AWK 使用空格分割字段。可以使用 -F 指定自定义分隔符。

bash 复制代码
awk -F ',' '{print $1, $3}' file.csv

处理 CSV 文件并打印第一和第三字段。

高级功能

自定义脚本

将 AWK 脚本保存到文件中以便重复使用:

script.awk

awk 复制代码
BEGIN {print "Name	Score"}
$3 > 60 {print $1, $3}
END {print "Processing Complete"}

运行脚本:

bash 复制代码
awk -f script.awk file.txt

使用外部变量

通过 -v 标志将变量传递给 AWK:

bash 复制代码
awk -v threshold=50 '$3 > threshold {print $1, $3}' file.txt

总结

AWK 是一个功能强大的文本处理工具,对于在 Linux 上处理数据的人来说至关重要。其简单性与强大功能的结合,使其在从简单的文本提取到复杂的数据转换的任务中都表现出色。

相关推荐
zcmodeltech8 分钟前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
江湖有缘20 分钟前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
实心儿儿29 分钟前
Linux —— 应用层协议HTTP
linux·网络·http
流星白龙33 分钟前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
有续技术1 小时前
哈斯 (Haas) 机床 IP、端口号配置内容总结
运维·服务器
小张同学a.1 小时前
LAMP架构2
linux·运维·网络·架构·负载均衡
千河殇 多想和她2 小时前
如何在Reaonix中使用CodeGraph以及CodeGraph效果实测经验分享
linux·运维·ubuntu
VortMall2 小时前
出海引流运维双升级|VortMall微服务商城系统v1.3.12 升级更新
运维·微服务·facebook
心念枕惊2 小时前
新写了个直播录制工具,可录制抖音快手斗鱼直播
运维·服务器·数据库
躺不平的理查德2 小时前
CMAKE备忘录
linux·运维·服务器