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

news2024/11/25 18:53:31

目录

    • 简介
    • 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.coloradmin.cn/o/2247444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java开发经验——SpringRestTemplate常见错误

摘要 本文分析了在使用Spring框架的RestTemplate发送表单请求时遇到的常见错误。主要问题在于将表单参数错误地以JSON格式提交,导致服务器无法正确解析参数。文章提供了错误案例的分析,并提出了修正方法。 1. 表单参数类型是MultiValueMap RestControl…

oracle会话追踪

一 跟踪当前会话 1.1 查看当前会话的SID,SERIAL# #在当前会话里执行 示例: SQL> select distinct userenv(sid) from v$mystat; USERENV(SID) -------------- 1945 SQL> select distinct sid,serial# from v$session where sid1945; SID SERIAL# …

数据可视化复习2-绘制折线图+条形图(叠加条形图,并列条形图,水平条形图)+ 饼状图 + 直方图

目录 目录 一、绘制折线图 1.使用pyplot 2.使用numpy ​编辑 3.使用DataFrame ​编辑 二、绘制条形图(柱状图) 1.简单条形图 2.绘制叠加条形图 3.绘制并列条形图 4.水平条形图 ​编辑 三、绘制饼状图 四、绘制散点图和直方图 1.散点图 2…

postgresql按照年月日统计历史数据

1.按照日 SELECT a.time,COALESCE(b.counts,0) as counts from ( SELECT to_char ( b, YYYY-MM-DD ) AS time FROM generate_series ( to_timestamp ( 2024-06-01, YYYY-MM-DD hh24:mi:ss ), to_timestamp ( 2024-06-30, YYYY-MM-DD hh24:mi:ss ), 1 days ) AS b GROUP BY tim…

【JavaEE初阶 — 多线程】定时器的应用及模拟实现

目录 1. 标准库中的定时器 1.1 Timer 的定义 1.2 Timer 的原理 1.3 Timer 的使用 1.4 Timer 的弊端 1.5 ScheduledExecutorService 2. 模拟实现定时器 2.1 实现定时器的步骤 2.1.1 定义类描述任务 定义类描述任务 第一种定义方法 …

一文学会Golang里拼接字符串的6种方式(性能对比)

g o l a n g golang golang的 s t r i n g string string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去。主要有以下几种拼接方式 拼接方式介绍 1.使用 s t r i n g string string自带的运算符 ans ans s2. 使用…

LeetCode 3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n))

【LetMeFly】3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n)) 力扣题目链接:https://leetcode.cn/problems/shortest-distance-after-road-addition-queries-ii/ 给你一个整数 n 和一个二维…

MyBatis中特殊SQL的执行

目录 1.模糊查询 2.批量删除 3.动态设置表名 4.添加功能获取自增的主键 1.模糊查询 List<User> getUserByLike(Param("username") String username); <select id"getUserByLike" resultType"com.atguigu.mybatis.pojo.User">&…

ES 基本使用与二次封装

概述 基本了解 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它提供了对海量数据的快速全文搜索、结构化搜索和分析功能&#xff0c;是目前流行的大数据处理工具之一。主要特点即高效搜索、分布式存储、拓展性强 核心功能 全文搜索:…

Azkaban部署

首先我们需要现在相关的组件&#xff0c;在这里已经给大家准备好了相关的安装包&#xff0c;有需要的可以自行下载。 只需要启动hadoop集群就可以&#xff0c;如果现在你的hive是打开的&#xff0c;那么请你关闭&#xff01;&#xff01;&#xff01; 如果不关会造成证书冲突…

Jmeter中的定时器

4&#xff09;定时器 1--固定定时器 功能特点 固定延迟&#xff1a;在每个请求之间添加固定的延迟时间。精确控制&#xff1a;可以精确控制请求的发送频率。简单易用&#xff1a;配置简单&#xff0c;易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…

JavaEE初学07

JavaEE初学07 MybatisORMMybatis一对一结果映射一对多结果映射 Mybatis动态sqlif标签trim标签where标签set标签foreach标签补充 Mybatis Mybatis是一款优秀的持久层框架&#xff0c;他支持自定义SQL、存储过程以及高级映射。Mybatis几乎免除了所有的JDBC代码以及设置参数和获取…

【layui】table的switch、edit修改

<title>简单表格数据</title><div class"layui-card layadmin-header"><div class"layui-breadcrumb" lay-filter"breadcrumb"><a>系统设置</a><a>简单表格数据</a></div> </div>&…

工具使用_docker容器_crossbuild

1. 工具简介 2. 工具使用 拉取 multiarch/crossbuild 镜像&#xff1a; docker pull multiarch/crossbuild 创建工作目录和示例代码&#xff1a; mkdir -p ~/crossbuild-test cd ~/crossbuild-test 创建 helloworld.c &#xff1a; #include <stdio.h>int main() …

Android 天气APP(三十七)新版AS编译、更新镜像源、仓库源、修复部分BUG

上一篇&#xff1a;Android 天气APP&#xff08;三十六&#xff09;运行到本地AS、更新项目版本依赖、去掉ButterKnife 新版AS编译、更新镜像源、仓库源、修复部分BUG 前言正文一、更新镜像源① 腾讯源③ 阿里源 二、更新仓库源三、修复城市重名BUG四、地图加载问题五、源码 前…

基于Java Springboot海洋馆预约系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

采用python3.12 +django5.1 结合 RabbitMQ 和发送邮件功能,实现一个简单的告警系统 前后端分离 vue-element

一、开发环境搭建和配置 #mac环境 brew install python3.12 python3.12 --version python3.12 -m pip install --upgrade pip python3.12 -m pip install Django5.1 python3.12 -m django --version #用于检索系统信息和进程管理 python3.12 -m pip install psutil #集成 pika…

STM32的中断(什么是外部中断和其他中断以及中断号是什么)

一、什么是EXTI 和NVIC EXTI&#xff08;External Interrupt/Event Controller&#xff09;EXTI 是外部中断/事件控制器&#xff0c;它负责处理外部信号变化&#xff0c;并将信号传递给中断控制器&#xff08;如 NVIC&#xff09;。主要负责以下功能&#xff1a; 外部事件检测…

【MyBatis】全局配置文件—mybatis.xml 创建xml模板

文章目录 模板文件配置元素typeAliasessettings 模板文件 创建模板 按照顺序打开【File】–>【settings】–>【Editor】–>【File and Code Templates】&#xff08;或直接搜索&#xff09; <?xml version"1.0" encoding"UTF-8" ?> <…

『VUE』34. 异步组件(详细图文注释)

目录 加载速度的优化示例代码总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 加载速度的优化 实际项目中你可能会有几十个组件,如果一开始就加载了全部组件(哪怕其中有些组件你暂时用不到)这无疑大大增加了响应时间,用户体验…