SHELL脚本学习(十三)初识 gawk 编辑器

概述

gawk提供了一种编程语言,而不仅仅是编辑器命令。
在gawk语言中,可以实现如下操作:

  • 定义变量保存数据
  • 使用算数和字符串运算符处理数据
  • 使用结构化编程概念 为数据处理添加处理逻辑
  • 提取文件中的数据并将其重新排列组合,最后生成格式化报告

一、gawk命令格式

gawk options program file

gawk的可用选项
选项描述
-F fs指定字段分隔符
-f file指定脚本文件
-v var=value定义gawk脚本中的变量及默认值
-L [keyword]执行兼容模式或警告级别

gawk的强大之处在于脚本,你可以编写脚本来读取文件中的数据,然后对其进行处理并显示,形成各种输出报告。

二、从命令行读取gawk脚本

gawk脚本用一对花括号定义,必须将命令放到花括号之间。
由于gawk命令行假定脚本是单个文本字符串,因此还必须将脚本放到单引号中。

$ gawk '{print "hello world"}'
sadas
hello world

脚本定义了一个命令 print,它会将输出打印到STDOUT。
因为没有指定文件,所以它一直等待STDIN的输入。无论输入什么,都会打印 hello world。按ctrl+D结束执行。

三、使用数据字段变量

gawk会为每一行的各个字段分配一个变量。默认情况下,gawk会将下列变量分配给文本行中的数据字段。

  • $0 代表整个文本行
  • $1 代表第一个字段
  • $2 代表第二个字段
  • $n 代表第n个字段
$ cat <data1
header line
data line 1
End of data line$ gawk '{print "first="$1 " second="$2}' data1
first=header second=line
first=data second=line
first=End second=of

四、在脚本中使用多条命令

要在命令行指定的脚本中使用多条命令,只需在命令间加分号即可。

$ cat <data1
header line
data line 1
End of data line$ gawk '{$1="replacement";print $0}' data1
replacement line
replacement line 1
replacement of data line

这个脚本先将第一个字段改成 replacement,再显示整行文本。

五、从文件中读取脚本

gawk允许将脚本保存在文件中,然后在命令行中引用脚本。


$ cat <gawk_cmd
{print $1="replacement"  " "$0}$ gawk -f ./gawk_cmd data1
replacement header line
replacement data line 1
replacement End of data line

六、处理数据前执行脚本

gawk会在读取数据前 执行 BEGIN指定的脚本

$ cat <gawk_cmd
BEGIN {print "Replacement result:"
}{print $1="replacement"  " "$0}$ gawk -f ./gawk_cmd data1
Replacement result:
replacement header line
replacement data line 1
replacement End of data line

七、处理输出后执行脚本

END关键字允许指定一个脚本,gawk会在处理完数据之后执行这个脚本。

 cat <gawk_cmd
BEGIN {print "Replacement result:"
}{print $1="replacement"  " "$0}END {print "End of file"
}$ gawk -f ./gawk_cmd data1
Replacement result:
replacement header line
replacement data line 1
replacement End of data line
End of file

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

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

相关文章

注解详解系列 - @Bean:定义Spring管理的Bean

注解简介 在今天的注解详解系列中&#xff0c;我们将探讨Bean注解。Bean是Spring提供的一个注解&#xff0c;用于在Java配置类中显式定义一个Spring管理的Bean。通过Bean注解&#xff0c;可以灵活地定义和配置Bean&#xff0c;从而增强应用程序的可维护性和可测试性。 注解定义…

python_时间戳对齐

需求 python 有2个保存时间戳的list&#xff0c; listA 和 listB, 对于listA中的每一个时间戳元素cur_ts&#xff0c; 查找listB中 与cur_ts最接近的前后两个时间戳元素 代码 import bisect# 示例数据 listA [1, 5, 10, 15] listB [2, 6, 8, 12, 14, 18]def find_closest_…

容器化spring boot应用程序

容器化spring boot应用程序有多种方式&#xff0c;如基于简单的Dockerfile&#xff0c;多阶段Dockerfile以及基于Docker Compose等&#xff0c;我们将逐步给大家介绍&#xff0c;本节主要介绍基于简单的Dockerfile进行容器化spring boot的应用程序。 创建Spring boot应用程序 …

SOLID:软件系统设计的五个基本原则

SOLID 是面向对象设计和编程中的五个基本原则的首字母缩写&#xff0c;旨在鼓励更加灵活和可维护的软件设计。SOLID 原则可以帮助我们更好地理解和实施某些设计模式。 SOLID 原则包括以下五个方面&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle, SRP&…

Java零基础-集合:Collections

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

未来科技中的RTK接收机应用探索

RTK实时差分定位技术&#xff08;RTK&#xff0c;Real-Time Kinematic&#xff09;&#xff0c;作为高精度定位技术的一种重要手段&#xff0c;已经在地理测绘、测量工程、航空航天等领域取得了广泛应用。随着科技的不断发展&#xff0c;RTK导航接收机的应用领域也日益拓宽。首…

AI大模型日报#0628:谷歌开源9B 27B版Gemma2、AI首次实时生成视频、讯飞星火4.0发布

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff01;《AI大模型日报》今日要点&#xf…

【高考】选专业时以什么为主?

【高考】选专业时&#xff0c;应避免的误区-CSDN博客 【高考】选专业时以什么为主&#xff1f;-CSDN博客 分数限制下&#xff0c;选好专业还是选好学校&#xff1f;-CSDN博客 分数限制下&#xff0c;选好专业还是选好学校&#xff1f;-CSDN博客 分数限制下&#xff0c;选好专…

合并排序的数组

题目链接 合并排序的数组 题目描述 注意点 A的末端有足够的缓冲空间容纳BA和B都是排序的 解答思路 最初想到的是双指针&#xff0c;从小到大找到合并B时应该A相应位置应该插入的元素&#xff0c;因为在插入的过程中B的元素会替换A原有位置的元素&#xff0c;所以需要先将A…

营销翻车,杜国楹出面道歉,小罐茶的“大师作”故事仓皇结尾

“小罐茶&#xff0c;大师作”&#xff0c;这句slogan曾一度在央视平台长时间、高密度播放&#xff0c;成为家喻户晓的广告词&#xff0c;也打响了小罐茶品牌的名号。但同时&#xff0c;市场上关于“大师作”真实性的质疑也从未停息。 就在6月25日小罐茶十二周年发布会上&#…

大数据面试题之HBase(2)

目录 列式数据库的适用场景和优势?列式存储的特点? HBase的rowkey设计原则 HBase的rowkey为什么不能超过一定的长度?为什么要唯一?rowkey太长会影响Hfile的存储是吧? HBase的RowKey设置讲究有什么原因 HBase的大合并、小合并是什么? HBase和关系型数据库(传统数…

Jenkins容器的部署

本文主要是记录如何在Centos7上安装docker,以及在docker里面配置tomcat、mysql、jenkins等环境。 一、安装docker 1.1 准备工作 centos7、VMware17Pro 1.2 通过yum在线安装dokcer yum -y install docker1.3 启动docker服务 systemctl start docker.service1.4 查看docke…

JavaSE期末复习速成笔记

面向对象 1. 面向对象的概念 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它将现实世界的事物抽象为对象&#xff0c;通过类和对象来创建各种功能模块&#xff0c;以此来设计和开发软件。 2. 类与对象 类&#xff1a;是对象的模板&#xff0c;定义了…

自动化巡检革命:旗晟双圆管轨道机器人的创新应用

在输煤皮带线和矿山带式输送机的巡检过程中&#xff0c;面临着高湿度、多粉尘、温湿度极端、噪音干扰&#xff1b;设备磨损频繁&#xff0c;难以及时发现问题&#xff1b;传统的人工巡检方式存在劳动强度大、效率低、检测质量不稳定、数据采集和分析滞后&#xff0c;无法实现实…

oracle 11g rac创建实例时发现只给一节点创建了实例 二节点没创建的处理方法

由于操作失误没有在二节点创建实例 删除数据库重新dbca建库 [oracleracdg1-1 dbs]$ dbca -silent -deleteDatabase -sourceDB rac11dg1 -sysDBAUserName sys -sysDBAPassword oracle_4U Connecting to database 4% complete 9% complete 14% complete 19% complete 23% …

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 两个字符串间的最短路径(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

npm创建一个空的vue3项目的方法或者pnpm创建vue3项目

1、前提我们已经安装了npm&#xff0c;或者pnpm 2、我们用npm来创建vue3项目 快速上手 | Vue.js 官网地址 这里我安装是的 node v18.20.3 以下是安装过程 &#xff1a; npm create vuelatest 根据自己的需要进行创建即可。 3、我们用pnpm来创建vite vue3项目 pnpm create …

Android 界面库 (二) 之 Data binding 详细介绍

1. 简介 回顾我们在前面文章《Android 界面库 (一) 之 View binding 简单使用》中学习的 View Binding&#xff0c;它旨在简化 View 与代码之间的绑定过程。它会在编译时期为每个 XML 布局文件生成相应的绑定类(Binding class)&#xff0c;该类里包含了布局文件每个有 ID 的 Vi…

【深度学习】服务器炼丹代码配置、Python使用指定gpu显卡运行代码

【显卡】服务器炼丹代码配置 写在最前面一、查看哪几块显卡能用二、使用指定gpu运行代码1、指定使用GPU0运行脚本&#xff08;默认是第一张显卡, 0代表第一张显卡的id,其他的以此类推&#xff09;2、指定使用多张显卡运行脚本 三、如何使用1、单块显卡使用2、多GPU训练使用Data…

昇思25天学习打卡营第3天|数据集全攻略:加载、操作与自定义

导入数据集相关库和类 首先&#xff0c;导入了 NumPy 库&#xff0c;并将其简称为 np 。要知道&#xff0c;NumPy 乃是用于科学计算的关键库&#xff0c;作用非凡。接着&#xff0c;从 mindspore.dataset 当中导入了 vision 模块。此外&#xff0c;还从 mindspore.dataset 里引…