linux三剑客之AWK

news2024/11/17 23:46:40

目录

AWK是什么

AWK基本结构

a.txt的文本实例

AWK内置变量

 a.txt的文本实例

 AWK自定义变量

a.txt的文本实例

AWK内置函数

 a.txt的文本实例

awk高级输出

 a.txt的文本实例

排序输出

a.txt的文本实例

条件选择输出

a.txt的文本实例

控制语句 

a.txt的文本实例

AWK是什么

awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。有多种版本:New awk(nawk),GNU awk( gawk)等。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

awk是由模式和操作组成。模式包括正则表达式、关系表达式、模式匹配表达式和(BEGIN语句块、pattern语句块、END语句块)。操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内

AWK基本结构

awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file

由BEGIN语句块、用于匹配信息的语句块、END语句块三部分组成。

这三个部分是可选的。任意一个部分都可以不出现在脚本中。

执行顺序为:

  • 第一步:执行BEGIN{ commands }语句块中的语句;

  • 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

  • 第三步:当读至输入流末尾时,执行END{ commands }语句块。

a.txt的文本实例

a.txt内容如下

1 2 3
4 5 6 19
7 8 9 29 35
2 3 5 6 7

 我想输出每行的第一列数据。注:print表示输出,$1表示第一列

awk '{print $1}' a.txt

结果

1
4
7
2

AWK内置变量

[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

 $n  当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 
 $0  这个变量包含执行过程中当前行的文本内容。
[N]  ARGC  命令行参数的数目。
[G]  ARGIND  命令行中当前文件的位置(从0开始算)。
[N]  ARGV  包含命令行参数的数组。
[G]  CONVFMT  数字转换格式(默认值为%.6g)。
[P]  ENVIRON  环境变量关联数组。
[N]  ERRNO  最后一个系统错误的描述。
[G]  FIELDWIDTHS  字段宽度列表(用空格键分隔)。
[A]  FILENAME  当前输入文件的名。
[P]  FNR  同NR,但相对于当前文件。
[A]  FS  字段分隔符(默认是任何空格)。
[G]  IGNORECASE  如果为真,则进行忽略大小写的匹配。
[A]  NF  表示字段数,在执行过程中对应于当前的字段数。
[A]  NR  表示记录数,在执行过程中对应于当前的行号。
[A]  OFMT  数字的输出格式(默认值是%.6g)。
[A]  OFS  输出字段分隔符(默认值是一个空格)。
[A]  ORS  输出记录分隔符(默认值是一个换行符)。
[A]  RS  记录分隔符(默认是一个换行符)。
[N]  RSTART  由match函数所匹配的字符串的第一个位置。
[N]  RLENGTH 由match函数所匹配的字符串的长度。
[N]  SUBSEP  数组下标分隔符(默认值是34)。

 a.txt的文本实例

参照上边a.txt文本。参照内置变量,我想计算每行有多少数据

awk '{print NF}' a.txt

结果

3
4
5
5

 我想打印第i行第i列的字段,比如第1行第1列,第2行第2列……

awk '{print $NR}' a.txt

结果

1
5
9
6

我想打印全文本,并且给每行打印行号 

awk '{print NR,$0}' a.txt

结果

1 1 2 3
2 4 5 6 19
3 7 8 9 29 35
4 2 3 5 6 7

 AWK自定义变量

自定义变量初始化为0。

传递外部变量方法案例:

[root@localhost ~]# LT=45

[root@localhost ~]# echo | awk '{print LT}' LT=$LT
45

[root@localhost ~]# LT=45

[root@localhost ~]# echo | awk -v L=$LT '{print L}'
45 

a.txt的文本实例

我想计算每行第一列的数字和

awk '{a=a+$1} END{print a}' a.txt

结果

14

AWK内置函数

 

 a.txt的文本实例

打印第一列的平方根

awk '{print sqrt($1)}' a.txt 

结果
1
2
2.64575
1.41421

awk高级输出

print 语句可用于快速而简单的输出。若要严格按照你所想的格式化输出,则需要使用 printf 语句。

printf 不会自动产生空格或者新的行,必须是你自己来创建,所以不要忘了 \n 。

printf(format, value1, value2, ...)

 a.txt的文本实例

[root@localhost ~]# awk '{ printf("%-8s $%6.2f\n", $1, $2 * $3) }' a.txt 
1        $  6.00
4        $ 30.00
7        $ 72.00
2        $ 15.00

解读:第一个规格 %-8s 将第一列以字符串形式在8个字符宽度的字段中左对齐输出。第二个规格 %6.2f 将第二列乘第三列以数字的形式,保留小数点后两位,在6个字符宽度的字段中输出。

排序输出

a.txt的文本实例

[root@localhost ~]# awk '{print $0}' a.txt | sort
1 2 3
2 3 5 6 7
4 5 6 19
7 8 9 29 35

条件选择输出

可以使用括号和逻辑操作符与 && , 或 || , 以及非 ! 对模式进行组合。

a.txt的文本实例

把第一列大于3的行输出

[root@localhost ~]# awk '$1>3 {print $0}' a.txt
4 5 6 19
7 8 9 29 35

 把第一列大于3的行或第二列大于2的行输出

[root@localhost ~]# awk '$1>3||$2>2 {print $0}' a.txt
4 5 6 19
7 8 9 29 35
2 3 5 6 7

控制语句 

if-else语句

while语句

for语句

a.txt的文本实例

把每行的数字和输出

[root@localhost ~]# awk '{a=0; for(i=1;i<NF+1;i=i+1){a=a+$i; if(i==NF){print a}}}' a.txt
6
34
88
23

把数据中大于5的数字相加求和

[root@localhost ~]# awk '{for(i=1;i<NF+1;i=i+1){if($i>5){a=a+$i}}} END{print a}' a.txt
126

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

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

相关文章

Java SE 继承和多态

继承和多态 1. 继承 1.1 为什么需要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是 现实世界错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0c;那在设计程序是就需…

Elasticsearch7.8.0版本高级查询—— 指定查询字段查询文档

目录一、初始化文档数据二、指定查询字段查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; {"name":"张三","…

Git知识学习

主要内容&#xff1a;熟练掌握Git、GitHub、GitLab、Gitee码云的使用 文章目录1.Git概述1.1版本控制1.2版本控制工具1.3Git和代码托管中心2.Git常用命令2.1设置用户签名2.2初始化本地库2.3查看本地库状态2.3.1首次查看2.3.2新增文件2.3.3再次查看2.4添加暂存区2.4.1将工作区文件…

! LaTeX Error: File xxx.sty not found-统一解决办法

在使用一些模板时常见这个错&#xff0c;其实就是缺宏包&#xff01;解决方案如下&#xff01; 第一步&#xff1a;在网站 https://ctan.org/pkg 找到你缺失的宏包&#xff0c;下载zip文件。 第二步&#xff1a;将解压后的文件夹复制到安装路径下&#xff1a; 如&#xff…

aws ecs 理解任务和容器的资源分配

参考资料 如何在 Amazon ECS 中为任务分配内存&#xff1f; 关于 Amazon ECS 中的 CPU 分配&#xff0c;我需要了解哪些信息&#xff1f; Amazon ECS CloudWatch 指标 任务定义参数 在ecs中可以指定资源的分配逻辑&#xff0c;其实就是cpu和内存分配。 下面这张图对ecs任…

搜索本地文件

李国春 处理大量的数据集时将文件整理到一起也是一个重要的工作。本文介绍一个将本地计算机目标文件的绝对路径汇集到一个文本文件的中的脚本。以方便后续批量处理这些文件。 启动RSD&#xff0c;在脚本编辑窗口输入图1中的代码。点击工具条上的小三角开始运行&#xff0c;提…

计网必会:电子邮件、SMTP协议

文章目录SMTP概念SMTP的操作过程——发送邮件-接收邮件细品&#xff1a;发送邮件与HTTP的对比邮件报文格式和MIME邮件访问协议SMTP概念 SMTP是电子邮件中的主要协议&#xff0c;它能使用TCP可靠数据传输服务&#xff0c;从发送方的服务器向接收方发送邮件&#xff0c; SMTP&am…

第四章必备前端基础知识-第二节1:CSS概述和选择器

文章目录一&#xff1a;CSS概述&#xff08;1&#xff09;概述&#xff08;2&#xff09;语法规范&#xff08;3&#xff09;CSS引入方式二&#xff1a;选择器&#xff08;1&#xff09;基础选择器①&#xff1a;标签选择器②&#xff1a;类选择器③&#xff1a;id选择器④&…

MyISAM存储引擎中的索引方案

MyISAM存储引擎中的索引 我们知道 InnoDB存储引擎中索引即数据&#xff0c;也就是聚集索引的那棵B树的叶子节点中已经把所有完整的用户记录都包含了&#xff0c;而MyISAM引擎也使用BTree作为索引结构&#xff0c;但是却 将索引和数据分开存储&#xff0c;其特点如下&#xff1…

ElasticSearch Docker 部署实例

文章目录前言基本环境构建Java安装docker安装es部署安装ES验证安装安装kibana设置密码进入es容器安装Vim修改es容器配置文件设置es访问密码设置Kibana密码理想状态方案二修改挂载安装IK分词器安装ik分词器在线安装离线安装前言 虽然说要停更&#xff0c;但是有些东西还是需要记…

SpringMVC | SSM整合(SpringMVC+Spring+MyBatis)

0️⃣概述&#x1f47e;SSM与三层架构对应关系SpringMVC —— 表示层&#xff08;controller、view&#xff09;Spring —— 业务逻辑层&#xff08;service&#xff09;MyBatis —— 数据访问层&#xff08;dao、pojo&#xff09;&#x1f47e;配置文件spring-config.xml ——…

vue全家桶之vuex详解

文章目录Vuex 概述1.1 组件之间共享数据的方式1.2 Vuex 是什么1.3 使用 Vuex 统一管理状态的好处什么样的数据适合存储到 Vuex 中2. Vuex 的基本使用3. Vuex 的核心概念3.1 核心概念概述3.2 State3.3 Mutation3.4 Action3.5 GetterVuex 概述 1.1 组件之间共享数据的方式 父向…

NET.前端基础

均摘自C语言中文网 网页一般由三部分组成&#xff0c;分别是 HTML&#xff08;超文本标记语言&#xff09;、CSS&#xff08;层叠样式表&#xff09;和 JavaScript&#xff08;简称“JS”动态脚本语言&#xff09;&#xff0c;它们三者在网页中分别承担着不同的任务。 HTML …

74. 搜索二维矩阵

74.搜索二维矩阵一、题目描述二、解题思路2.1 二分查找行2.2 二分查找列三、提交结果一、题目描述 二、解题思路 采用两次二分的方式&#xff0c;第一次二分用于找到target在二维矩阵中的行标&#xff0c;第二次二分只需要对找到的行进行二分查找即可。 2.1 二分查找行 初始…

10.3 定制操作

文章目录向算法传递函数谓词排序算法lambda表达式可调用对象介绍lambdafind_if 和 find_each的介绍lambda的捕获和返回值捕获引用捕获隐式捕获可变lambda指定lambda返回的类型函数体参数绑定标准库bind函数占位符_n具体使用bind的参数使用bind重排参数顺序绑定引用参数向算法传…

svg动画图形绘制

先介绍下绘制图形的标签 1&#xff1a;线段&#xff1a;line 2&#xff1a;矩形&#xff1a;rect 3: 圆形&#xff1a;circle 4&#xff1a;多边形&#xff1a;polyline&#xff08;不会自动连接起点和终点&#xff09; 5: 多边形:polygon (会自动连接起点和终点&#xff09; v…

SAP FICO 理解统驭科目记账与特殊记账

统驭科目记账与特殊记账 【背景】 统驭科目通常分为三类&#xff1a;资产&#xff08;A&#xff09;、客户&#xff08;D&#xff09;和供应商&#xff08;K&#xff09;&#xff0c;在创建会计科目时可在”控制数据“选项卡下进行选择。 在创建客户/供应商主数据的时候&#…

Vue插槽Slot的使用

1、认识插槽Slot 在开发中&#xff0c;我们会经常封装一个个可复用的组件&#xff1a; 前面我们会通过props传递给组件一些数据&#xff0c;让组件来进行展示&#xff1b;但是为了让这个组件具备更强的通用性&#xff0c;我们不能将组件中的内容限制为固定的div、span等等这些…

【零基础】学python数据结构与算法笔记15-欧几里得、RSA

文章目录前言95.欧几里得算法96.RSA算法介绍97.RSA算法测试98.算法课程总结总结前言 学习python数据结构与算法&#xff0c;学习常用的算法&#xff0c; b站学习链接 95.欧几里得算法 求最大公约数 欧几里得算法&#xff1a;gcd(a,b) gcd(b,a mod b) #mod取余 例&#xff1a…

04.自定义类型:结构体

1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag { member-list;//成员列表 }variable-list;//变量列表 EG: 描述一位学生&#xff1a; struct Stu {char name[…