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 上处理数据的人来说至关重要。其简单性与强大功能的结合,使其在从简单的文本提取到复杂的数据转换的任务中都表现出色。

相关推荐
猪脚踏浪1 小时前
linux 拷贝文件或目录到指定的位置
linux
大树8817 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠17 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质17 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush417 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52017 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz17 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工18 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智19 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩19 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言