Linux文本处理三剑客:awk(结构化命令)

news2024/9/25 7:23:14

在Linux操作系统中,grep、sed、awk被称为文本操作“三剑客”,上几期中,我们详细介绍grep、sed、awk的基本使用方法,希望能够帮助到有需要的朋友。

目录

1、前言

2、条件控制语句

语法结构:IF

语法结构:IF - ELSE

语法结构:IF - ELSE - IF

3、循环语句

for 循环

while 循环

Break

Continue

Exit


1、前言

awk作为一门编程语言还有很多内容,我们继续学习awk。

网上有很多教程,讲的都很棒的,但是也讲得很迷糊。

关注我,我尽量讲清晰一些,希望您在看的过程中,能够有所发现。

老规矩,上官方手册:Gawk - GNU Project - Free Software Foundation (FSF)

工作流程如下图:BEGIN块开始,循环执行BODY块,最后执行END块。

大家记住这张图,下面我们来讲常用的结构化命令。它支持条件控制和循环语句,可以帮助您编写更复杂的程序。

主要有以下几种:

  • 条件控制语句:IF  、IF - ELSE 、IF - ELSE - IF
  • 循环语句:For、While
  • 循环结束语句:Break、Continue、Exit

2、条件控制语句

AWK中的条件控制语句与C语言类似,包括以下几种:

IF根据条件执行指定语句。
IF - ELSE根据条件执行不同的语句。
IF - ELSE - IF根据多个条件执行不同的语句。

语法结构:IF

# 形式1:根据条件选择执行
if (condition)
    action



# 形式2:使用花括号来执行一组
if (condition)
{
    action-1
    action-1
    .
    .
    action-n
}

语法结构:IF - ELSE

# if-else语句中允许在条件为假时执行另外一组的动作
if (condition)
    action-1
else
    action-2

语法结构:IF - ELSE - IF

if (condition)
  action-1
else if (condition)
  action-2
else if (condition)
  action-3

示例代码:

#IF 语句
# 判断数字是奇数还是偶数的示例:
$ awk 'BEGIN {num = 10; if (num % 2 == 0) printf "%d是偶数.\n", num }'

# 执行以上命令将得到如下结果:
10是偶数.




# IF - ELSE语句
# 判断数字是否为偶数的情况:
$ awk 'BEGIN {num = 12; 
   if (num % 2 == 0) printf "%d是偶数.\n", num; 
   else printf "%d是奇数.\n", num 
   }'

# 执行以上操作将得到如下结果:
12是偶数.




# IF-ELSE-IF语句
# 实现多个条件的判断:
$ awk 'BEGIN {
a=20;
if (a==10)
  print "a = 10";
else if (a == 20)
  print "a = 20";
else if (a == 30)
  print "a = 30";
}'

# 执行以上命令将得到如下结果:
a = 20

3、循环语句

AWK 语言支持以下几种循环:

For用于重复执行一组语句,直到某个条件满足。
While只要某个条件为真,就一直重复执行一组语句。
Break用以结束循环。
Continue用于在循环体内部结束本次循环,从而直接进入下一次循环迭代。
Exit用于结束脚本程序的执行。

for 循环

for (初始化; 条件; 递增/递减)
    动作

for 循环首先执行初始化动作,然后检查条件。如果条件为真,则执行动作,然后再执行递增或递减操作。只要条件为 true 循环就会一直执行。每次循环结束都会进条件检查,若条件为 false 则结束循环。

这里的for循环,和C语言是一样的,需要用;分开。

# 使用 for 循环输出数字 1 至 5
$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'

# 输出结果:
1
2
3
4
5

while 循环

while (条件)
    动作

While 循环首先检查条件是否为 true ,若为 true 则执行动作。此过程一直重复直到条件为 false 才停止。

# 使用 While 循环输出数字 1 到 5

awk 'BEGIN { i = 1; while (i < 6) { print i; ++i } }'

# 输出结果:
1
2
3
4
5

Break

# break 用以结束循环。
# 计算和大于 50 时使用 break 结束循环

awk 'BEGIN {
   sum = 0; for (i = 0; i < 20; ++i) { 
      sum += i; if (sum > 50) break; else print "Sum =", sum 
   } 
}'


# 输出结果:
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45

Continue

# Continue 语句用于在循环体内部结束本次循环,从而直接进入下一次循环迭代。
# 输出 1 到 20 之间的偶数

$ awk 'BEGIN {for (i = 1; i <= 20; ++i) {if (i % 2 == 1) continue ; else print i} }'

# 输出结果:
2
4
6
8
10
12
14
16
18
20

Exit

# Exit 用于结束脚本程序的执行,可以提供一个整数作为参数表示 AWK 进程结束状态。

# 和大于 50 时结束 AWK 程序

awk 'BEGIN {
   sum = 0; for (i = 0; i < 20; ++i) {
      sum += i; if (sum > 50) exit(10); else print "Sum =", sum 
   } 
}'


# 输出结果:
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45

让我们检查一下脚本执行后的返回状态:

$ echo $?

执行上面的命令可以得到如下的结果:

19

如果您觉得有些用处,欢迎在评论区留言,关注。谢谢您的阅读!

以上只是简单的介绍了一部分,后期我还会专门出一起处理脚本的实践教程,敬请关注!

往期学习笔记:

Windows系统开启Linux子系统(Ubuntu)

Linux常用命令(目录操作命令)

Linux常用命令:文件的创建、复制、移动、查找和删除命令

Linux常用命令:文本文件的查看与编辑

Linux常用命令:文本文件的拼接与分割

Linux常用命令:文件的权限管理

Linux常用命令:文件的下载、压缩与解压

Linux常用命令:常见的操作符

Linux常用命令:系统操作命令
 

 Linux文本处理三剑客:grep

Linux文本处理三剑客:sed

Linux文本处理三剑客:awk

Linux文本处理三剑客:awk(常用匹配模式)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1486767.html

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

相关文章

蓝桥杯练习题——前缀和

1.壁画 思路 1.求最坏情况下&#xff0c;画的墙总和是多少 2.画的墙在中间连续一段&#xff0c;画了的墙长度是 n / 2 向上取整 3.取最大的 n / 2 向上取整区间和 #include<iostream> using namespace std; const int N 5e6 10; char s[N]; int a[N]; int t, n;int m…

【RHEL】三分钟启动完整版vim——vim9 huge编译安装

详细安装步骤 一键安装传送门 Vim提供了许多快捷键和命令来加快文本编辑的速度和效率。它具有强大的搜索和替换功能&#xff0c;支持多种文件格式&#xff0c;可以通过插件扩展功能&#xff0c;并提供了强大的自动补全功能。   然而在大多数Linux操作系统中利用系统软件源安装…

【深度学习笔记】计算机视觉——锚框

锚框 目标检测算法通常会在输入图像中采样大量的区域&#xff0c;然后判断这些区域中是否包含我们感兴趣的目标&#xff0c;并调整区域边界从而更准确地预测目标的真实边界框&#xff08;ground-truth bounding box&#xff09;。 不同的模型使用的区域采样方法可能不同。 这里…

事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测

事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测 目录 事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测预测效果基本描述程序设计参考资料 预测效果 基本描述 Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测 运行环境: Matlab2023及以 上…

Nature 研究亮点(Volume 626 Issue 8001, 29 February 2024)

文章目录 激光雕刻肥皂膜卵细胞的回收系统巴斯克语的起源产后抑郁症的治疗 激光雕刻肥皂膜 研究者&#xff1a;Haitao Xu 和 Yu Zhao&#xff0c;清华大学&#xff0c;北京。 发现&#xff1a;在特定条件下&#xff0c;可以使用激光在肥皂膜上进行雕刻。肥皂膜由洗涤剂分子&am…

ElasticSearch DSL语法

一、文档批量操作 1.批量获取文档数据 批量获取文档数据是通过_mget的API来实现的 (1)在URL中不指定index和type 请求方式&#xff1a;GET 请求地址&#xff1a;_mget 功能说明 &#xff1a; 可以通过ID批量获取不同index和type的数据 请求参数&#xff1a; docs : 文档数…

Tomcat介绍在IDEA中创建JavaWeb工程

文章目录 一、WEB服务器服务器概述使用Java代码手写web服务器 二、服务器软件Web服务器服务器软件的使用步骤 三、TomcatTomcat的下载Tomcat的安装与卸载Tomcat的启动与关闭常见问题 四、新建Java Web项目并将项目部署到tomcat中新建Java Web项目将项目部署到Tomcat中出现的问题…

在你的 Vue + Electron 项目里,引入 ESLint

因为我的项目是基于 Electron 平台的 Web 应用&#xff0c;使用 Vue 3 实现&#xff0c;而且用了 TypeScript&#xff0c;所以&#xff0c;在引入 ESLint 的时候&#xff0c;要考虑好几种规范的问题。 文章目录 零、简介1. 规则2. 配置文件3. 共享配置4. 插件5. 解析器6. 自定义…

Unity 切换场景

场景切换前必须要将场景拖动到Build中 同步加载场景 using System.Collections; using System.Collections.Generic; //using UnityEditor.SearchService; using UnityEngine; // 场景管理 需要导入该类 using UnityEngine.SceneManagement;public class c3 : MonoBehaviour {…

你是否知道Python的列表翻转、排序和多维列表

1.reverse() 表示翻转列表中的元素&#xff0c;不会生成新列表 list1 [2343, 55, 4, 345, 676, 768] list1.reverse() print(list1) # [768, 676, 345, 4, 55, 2343] 2.sort() 对原列表元素进行排序&#xff0c;默认是升序 list1 [2343, 55, 4, 345, 676, 768] list1…

在Python中使用多线程(通俗版本)

一、多线程的介绍&#xff1a; 1.进程 通常一个进程包含一个或者多个线程&#xff0c;每个进程有自己独立的一块内存空间&#xff0c;所有的线程共享这一块空间&#xff0c;例如&#xff1a;在Windows操作系统中&#xff0c;一个运行的xx.exe就是一个进程。 2.线程 一个进程…

lua调用C++函数

第一步搭建lua的环境. win10 lua环境搭建-CSDN博客 我使用的环境是win10vs2015lua54 先来个最简单的lua调用C函数, 无参数无返回值的 第一步:定义C函数. int CTest(lua_State* L) // 返回值是固定的int类型,返回0表示没有返回参数,返回1表示有一个返回参数 {std::cout &l…

什么是支持向量机(Support vector machine)和其原理

作为机器学习的基础算法&#xff0c;SVM被反复提及&#xff0c;西瓜书、wiki都能查到详细介绍&#xff0c;但是总是觉得还差那么点&#xff0c;于是决定自己总结一下。 一、什么是SVM&#xff1f; 1、解决什么问题&#xff1f; SVM&#xff0c;最原始的版本是用于最简单的线…

【C++从0到王者】第五十站:B树

文章目录 一、内查找与外查找1.内查找2.外查找 二、B树概念三、B树的插入1.B树的插入分析2.B树插入总结3.插入代码实现4.B树满树和最空时候的对比5.B树的删除6.遍历B树7.B树的性能分析 一、内查找与外查找 1.内查找 像我们之前所用的在内存中的查找就是内查找 种类数据格式时…

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行 目录 Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行前言1 使用GUI-Guider设计UI1.1 创建工程1.2 设计UI 2 ESP工程导入UI2.1 移植LVGL2.2 移植UI文件2.3 调用UI文件2.4 烧录测试 结束语 前言 GU…

STM32(5) GPIO(2)输出

1.点亮LED 1.1 推挽接法和开漏接法 要想点亮LED&#xff0c;有两种接法 推挽接法&#xff1a; 向寄存器写1&#xff0c;引脚输出高电平&#xff0c;LED点亮&#xff1b;向寄存器写0&#xff0c;引脚输出低电平&#xff0c;LED熄灭。 开漏接法&#xff1a; 向寄存器写0&…

杂记-买华强北电子产品的教训

之前不信邪&#xff0c;去华强北买了一个西部数据所谓全新的机械硬盘&#xff0c;1T&#xff0c;差不多300元。用了不到一年就坏了。然后去官网查S/N&#xff0c;结果查无device。Onedrive同步的时候&#xff0c;我把同步路径设置为机械硬盘&#xff0c;结果机械硬盘崩的时候&a…

HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口

1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript &#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…

【和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告

【&#x1f40b;和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告 文章目录 【&#x1f40b;和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告1 业务背景2 数据说明3 数据探索性分析4 用户行为分析4.1 用户属性与行为关系分析4.2 转化行为在不同用户属性群体中的分布…

Android之MQTT的使用

MQTT的简单介绍 MQTT是广泛应用于物联网的传输协议&#xff0c;基于TCP MQTT有一个代理服务器&#xff0c;其客户端可以订阅主题或向一个主题发送消息&#xff0c;从而实现通信 MQTT 设计了 3 个 QoS 等级。 QoS 0&#xff1a;消息最多传递一次&#xff0c;如果当时客户端不…