day20:三剑客——awk基础

news/2024/11/8 10:29:10/

一,概述

AWK 是一种用于处理文本和数据的编程语言,特别擅长用于处理格式化文本文件。它通过将输入数据分成字段,逐行进行处理,广泛应用于数据分析、文本处理和系统管理中。

二,使用方式

命令模式(重点)

AWK 可以直接在命令行中运行,适合执行一些简短的文本处理任务。基本格式如下:

awk 【选项】 '条件 {动作}' 文件名

-F:定义字段的分隔符,默认空格

-v:定义变量并赋值

awk -F : '{print $1,$3,$NF}' a.txt 
如果分隔符为默认的空格的话就不要写-F了

脚本模式(了解)

复杂的 AWK 程序可以写入一个脚本文件,通过 -f 选项执行。

awk -f script.awk 文件名

三,工作原理

AWK 的工作原理是逐行读取文件,将每行内容分割成字段,并根据指定的条件进行相应的操作。它通常分为三大块:

  • BEGIN:在处理文件内容前执行的语句。
  • 主体:逐行处理数据。
  • END:在处理文件内容后执行的语句。

四,内部变量(重点)

AWK 提供了一些内置的内部变量,用于控制和访问数据:

  • $0:当前行的内容。

  • $1$2…:当前行的第一个、第二个字段

  • $NF:当前行的最后列

  • NF:当前行的字段数。

  • NR:当前处理的行数。

  • FS:字段分隔符(默认为空格)命令行中使用-F 符号 形式或者放到{内}。

    • 在 AWK 中,FS 应在 BEGIN 块中设置,或者直接通过 -F 参数设置,这样才能在文件读取前生效。

  • OFS:输出字段分隔符(默认空格)放到{OFS="分隔符"}

  • RS:记录分隔符(默认为换行符)。

五,自定义变量

六,begin-end语法(重点)

语法

BEGIN { 初始化代码 }
{ 主体代码 }
END { 收尾代码 }

七,awk结合正则表达式(重要)

AWK 可以结合正则表达式来进行复杂的数据匹配。例如,匹配以特定字符开头的行或包含特定模式的字段。

awk '/正则表达式/ {动作}' 文件名

算术运算符
  • +:加法,例如 x + y
  • -:减法,例如 x - y
  • *:乘法,例如 x * y
  • /:除法,例如 x / y
  • %:取模,例如 x % y
  • ++--:自增和自减,适用于变量,例如 x++--y
比较运算符

用于比较两个值,常用在条件判断中:

  • ==:等于,例如 $1 == 10
  • !=:不等于,例如 $2 != "text"
  • ><:大于和小于,例如 $3 > 5
  • >=<=:大于等于和小于等于
逻辑运算符

用于组合条件:

  • &&:逻辑与(AND),当两个条件都为真时返回真。

    awk '$1 > 10 && $2 < 20 {print $0}' file.txt

  • ||:逻辑或(OR),当至少一个条件为真时返回真。

    awk '$1 > 50 || $2 < 5 {print $0}' file.txt

  • !:逻辑非(NOT),将条件的真假性取反。

    awk '!/error/ {print $0}' file.txt

正则运算符
  • ~:匹配运算符,用于检测字段是否符合某个正则表达式。

    awk '$1 ~ /^[A-Z]/ {print $0}' file.txt # 第一个字段以大写字母开头

  • !~:不匹配运算符,检测字段是否不符合某个正则表达式。

    awk '$1 !~ /error/ {print $0}' file.txt # 第一个字段不包含 "error"

八,流程控制

AWK 提供了 ifelsewhilefor 等控制语句来实现复杂的逻辑判断和数据处理。

流程控制

{ if (条件) {动作} else {其他动作} }

循环控制

{ for (i=1; i<=NF; i++) {print $i} }


http://www.ppmy.cn/news/1545334.html

相关文章

【循环引用及格式化输出】

垃圾回收机制 当一个值在内存中直接引用跟间接引用的量为0时&#xff0c;&#xff08;即这个值没有任何入口可以找到它&#xff09;那么这个值就会被清空回收♻️&#xff0c;释放内存空间&#xff1b; 列表在内存中的存储方式 1&#xff09;引用计数的两种方式 x "ea…

「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现

本篇将带领你实现一个倒计时和提醒功能的应用&#xff0c;用户可以设置倒计时时间并开始计时。当倒计时结束时&#xff0c;应用会显示提醒。该项目涉及时间控制、状态管理和用户交互&#xff0c;是学习鸿蒙应用开发的绝佳实践项目。 关键词 UI互动应用倒计时器状态管理用户交互…

Objective-C 音频爬虫:实时接收数据的 didReceiveData_ 方法

在互联网技术领域&#xff0c;数据的获取和处理是至关重要的。尤其是对于音频内容的获取&#xff0c;实时性和效率是衡量一个爬虫性能的重要指标。本文将深入探讨在Objective-C中实现音频爬虫时&#xff0c;如何高效地使用didReceiveData:方法来实时接收数据&#xff0c;并通过…

Android Studio 运行模拟器无法打开avd

问题&#xff1a;已经下载了HAXM 打开模拟器时还是提示未下载HAXM&#xff0c;无法打开avd 解决方案&#xff1a; 控制面板 -> 启动或关闭Windows功能&#xff0c;打开图下两项&#xff0c;后重启电脑重启Android Studio&#xff1a;

除草机器人算法以及技术详解!

算法详解 图像识别与目标检测算法 Yolo算法&#xff1a;这是目标检测领域的一种常用算法&#xff0c;通过卷积神经网络对输入图像进行处理&#xff0c;将图像划分为多个网格&#xff0c;每个网格生成预测框&#xff0c;并通过非极大值抑制&#xff08;NMS&#xff09;筛选出最…

鸿蒙ArkTS中的获取网络数据

一、通过web组件加载网页 在C/S应用程序中&#xff0c;都有网络组件用于加载网页&#xff0c;鸿蒙ArkTS中也有类似的组件。   web组件&#xff0c;用于加载指定的网页&#xff0c;里面有很多的方法可以调用&#xff0c;虽然现在用得比较少&#xff0c;了解还是必须的。   演…

STM32 BootLoader 刷新项目 (八) 读取Flash保护ROP-0x54

STM32 BootLoader 刷新项目 (八) 读取Flash保护ROP-0x54 下面我们来介绍一下BootLoader一上电对芯片Option Byte操作的过程&#xff0c;Option Byte可以配置的功能包括**Read protection (RDP) **读出保护级别&#xff0c;**BOR级别&#xff08;Brown-out Reset&#xff09;**…

# SpringMVC学习

SpringMVC 1、SpringMVC是什么&#xff1f; SpringMVC 是 Spring 框架的一个模块&#xff0c;专门用于构建 Web 应用程序。它基于 Model-View-Controller (MVC) 设计模式&#xff0c;帮助开发者将应用程序的不同部分&#xff08;模型、视图和控制器&#xff09;分离&#xff…