linux三剑客之AWK

news/2023/5/28 8:23: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.exyb.cn/news/show-4560052.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

Open Street Map—2022年道路数据

道路数据是我们在各项研究中经常使用的数据&#xff01;道路数据虽然很常用&#xff0c;但是却基本没有能下载最近年份道路数据的网站&#xff0c;所以很多人不知道如何获到道路数据。 本次我们为大家推荐的下载道路数据的网站是Open Street Map&#xff01;我们先来了解下Ope…

OpenDRIVE地图第二篇:车道LANE

OpenDRIVE地图第二篇&#xff1a;车道LANE前言1 车道ID排序2 Lane sections3 Lane offset4 Lane linkage前言 在前讲过了参考线reference line&#xff0c;参考线是没有宽度的&#xff0c;车辆也无法通行&#xff0c;下面引入车道Lane,车道本身有宽度(width)&#xff0c;以及虚…

ArcGIS之计算面要素的宽度

&#xfeff;&#xfeff; 当我们在进行地图制图的时候&#xff0c;有时会需要选取图上宽度大于1mm的湖泊&#xff1b;又或者是我们有其它研究需求时&#xff0c;需要计算多边形的宽度。现在为大家介绍如何运用ArcGIS软件计算面要素&#xff08;多边形&#xff09;的宽度。 首…

k30最小宽度380不管用了_各场所疏散楼梯净宽度知识点归纳

各种场所的疏散楼梯净宽度在三本规范都有涉及&#xff0c;这些场所皆是常见场所&#xff0c;均有可能融合到案例分析题目中&#xff0c;现在把这些知识点进行归纳&#xff0c;同学们可结合图表加深对数字的记忆。规范原文&#xff1a;《建筑设计防火规范》&#xff08;GB50016-…

基于OpenCV的视频道路车道检测

基于OpenCV的视频道路车道检测基于OpenCV的视频道路车道检测前言综述运行方法车道检测的实现路面图像二值化基于透视变换提取车道区域基于二次多项式拟合车道线计算曲率半径与车辆的偏移距离用车道区域标注原始图像总结End.基于OpenCV的视频道路车道检测 前言 本篇博客作为博…

AutoCAD Civil 3D-部件-创立分岔路口和宽度自适应道路

上回书说道&#xff0c;这个路经常变来变去的&#xff0c;一会汇合一会分叉。本来只要把路两边的路肩所在的基准线设定好高程和走势就行了&#xff0c;但是路肩又是不变的&#xff0c;而且自带的路肩没有elevation target &#xff0c; 不能锚定高程线。里面的车道倒是有target…

《OpenDRIVE1.6规格文档》3

目录8.6 道路的应用案例8.6.1 用线性路拱对道路形状进行建模9 车道9.1 在车道段中进行车道分组9.2 车道段9.3 车道偏移9.4 车道连接9.5 车道属性9.5.1 车道宽度9.5.2 车道边界9.5.3 车道类型9.5.4 车道材质9.5.5 车道限速9.5.6 车道的使用8.6 道路的应用案例 以下小节包含部分…

车道线检测 车道宽度_半局部3d车道检测和不确定性估计

车道线检测 车道宽度Over the past few years, autonomous driving has drawn numerous attention from both academic and industry. To drive safely, one of the fundamental problems is to perceive the lane structure accurately in real-time. Robust detection on cur…

基于SSM的微信小程序在线视频学习平台

​ 目录 一、整体目录&#xff08;示范&#xff09;&#xff1a; 文档含项目技术介绍、E-R图、数据字典、项目功能介绍与截图等 二、运行截图 三、代码部分&#xff08;示范&#xff09;&#xff1a; 四、数据库表(示范)&#xff1a; 数据库表有注释&#xff0c;可以导出数…

ssm基于微信小程序的校园二手交易——计算机毕业设计

项目介绍 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;校园二手交易被用户普遍使用&#xff0c;为方便用户能…

ssm 基于微信小程序美容理发店预约系统app

爱美是女人的天性,所以我的关注点自然在于美容上。经过调查,包括询问家中的长辈以及附近美容院的人,发现现在的美容院已经不再仅仅只有保养脸了。他们更多的加入了身体的护理以及养生的概念。这样一来,美容院本身的项目逐渐增多,产品逐渐增多。因此员工的工作量也加大了许多。为…

ssm基于微信小程序的高校毕业论文管理系统小程序--计算机毕业设计

网络的广泛应用给生活带来了十分的便利。所以把高校毕业论文管理与现在网络相结合&#xff0c;利用java技术建设高校毕业论文管理系统小程序&#xff0c;实现高校毕业论文的信息化。则对于进一步提高高校毕业论文管理发展&#xff0c;丰富高校毕业论文管理经验能起到不少的促进…

java ssm框架调用微信,微信小程序实现前后台交互(后台使用ssm框架)

微信小程序前端代码 &#xff1a;index.js中page的onload函数。onLoad: function () {wx.request({url: http://localhost:8080/BaseProjectSSM/admin/clazz_table/list2,method: post,header: {content-type: application/json // 默认值},success: res > {console.log(res…

计算机毕业设计之java+ssm基于微信小程序的个性化商铺系统

计算机毕业设计之javassm基于微信小程序的个性化商铺系统 项目介绍 随着信息化时代的到来,管理系统都趋向于智能化、系统化,个性化商铺系统也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而个性化商铺…

ssm基于微信小程序跳蚤市场系统

项目介绍 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;跳蚤市场小程序被用户普遍使用&#xff0c;为方便用户…

SSM框架下的微信登录

typora-root-url: D:\编程项目\typora文档\图片目录 SSM框架下的微信登录 首先看官方给出的登录过程&#xff0c;然后按步骤一个个来 1.获取CODE 首先用微信提供的方法获取code&#xff0c;使用wx.login()方法&#xff0c;还顺便封装了一个微信请求的发起方法 这里封装了俩…

SSM项目————整合微信支付

一、准备页面1、第一个页面&#xff0c;购票页面2、第二个页面&#xff0c;详情支付页面3、第三个页面&#xff0c;支付成功跳转页面二、准备二维码&#xff08;测试一下&#xff09;三、准备微信参数、环境、HttpClient工具类、雪花算法工具类。四、开始支付功能编码&#xff…

ssm基于微信小程序的电影交流平台系统--计算机毕业设计

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;电影交流平台小程序也不例外&#xff0c;但目前国内的市场仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#…

SSM+Websocket实现微信网页版仿写

微信网页版仿写聊天思路WebSocket部分一.后端WebSocketChat类ServerManager类SendMyMessage类二.前端WebSocket主要页面展示1.注册登录页面2.和好友聊天3.群聊4.添加好友5.群聊管理6.更换头像(用户和群聊)7.查看好友个人信息源码下载:无法访问github项目地址总结聊天思路 在一…

2019年互联网高频Java面试题指南!互联网升职加薪方案!

《2019年互联网高频Java面试题指南&#xff01;互联网升职加薪方案&#xff01;》 2019年我们只聊面试&#xff01;让你能够随时准备升职加薪&#xff01;少刷点抖音头条&#xff0c;少喝点鸡汤毒药&#xff0c;少研究些成功学&#xff0c;这些给不了你什么&#xff0c;你也得…