当前位置: 首页 > news >正文

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

目录

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

简介

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

AWK 的主要特性

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

基本语法

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

示例

1. 打印文件的所有行

awk '{print}' file.txt

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

2. 打印特定字段

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

awk '{print $1, $3}' file.txt

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

3. 打印匹配模式的行

awk '/pattern/' file.txt

打印包含“pattern”的行。

4. 基于条件过滤并打印

awk '$3 > 50 {print $1, $3}' file.txt

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

5. 使用内置变量

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

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

6. 执行算术运算

awk '{sum += $3} END {print "Total:", sum}' file.txt

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

7. 字符串操作

awk '{print toupper($1)}' file.txt

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

8. 使用 BEGIN 和 END 块

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

9. 处理分隔符文件

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

awk -F ',' '{print $1, $3}' file.csv

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

高级功能

自定义脚本

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

script.awk

BEGIN {print "Name	Score"}
$3 > 60 {print $1, $3}
END {print "Processing Complete"}

运行脚本:

awk -f script.awk file.txt

使用外部变量

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

awk -v threshold=50 '$3 > threshold {print $1, $3}' file.txt

总结

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

http://www.lryc.cn/news/491121.html

相关文章:

  • FPGA经验谈系列文章——8、复位的设计
  • C#里怎么样实现操作符重载?
  • 项目实战:Vue3开发一个购物车
  • Oracle SQL*Plus中的SET VERIFY
  • Spring AI 框架使用的核心概念
  • 二叉树路径相关算法题|带权路径长度WPL|最长路径长度|直径长度|到叶节点路径|深度|到某节点的路径非递归(C)
  • 前端:JavaScript (学习笔记)【2】
  • [面试]-golang基础面试题总结
  • 【案例】泛微.齐业成助力北京中远大昌汽车实现数电票全流程管理
  • 微软安全文章合集
  • 自然语言处理: RAG优化之Embedding模型选型重要依据:mteb/leaderboard榜
  • 鸿蒙主流路由详解
  • C#构建一个简单的循环神经网络,模拟对话
  • Linux上安装单机版Kibana6.8.1
  • 短视频矩阵矩阵,矩阵号策略
  • Rust 力扣 - 2266. 统计打字方案数
  • 【大数据技术与开发实训】携程景点在线评论分析
  • 46.坑王驾到第十期:vscode 无法使用 tsc 命令
  • postman 调用 下载接口(download)使用默认名称(response.txt 或随机名称)
  • 单片机_简单AI模型训练与部署__从0到0.9
  • 对撞双指针(七)三数之和
  • 【Ubuntu24.04】服务部署(虚拟机)
  • timm库加载的模型可视化
  • 服务限流、降级、熔断-SpringCloud
  • 2024最新YT-DLP使用demo网页端渲染
  • 《第十部分》1.STM32之通信接口《精讲》之IIC通信---介绍
  • wireshark使用lua解析自定义协议
  • (Keil)MDK-ARM各种优化选项详细说明、实际应用及拓展内容
  • Qt实现可拖拽的矩形
  • CentOS:A服务器主动给B服务器推送(上传),B服务器下载A服务器文件(下载)