AWK语言第二版 1.2简单输出

1.2 简单输出

本章的后续部分,包含了一系列简单但典型的Awk程序样例,都是对前面的emp.data文件进行操作。为防遗忘,这里把emp.data文件再发一遍:

Beth    21      0
Dan     19      0
Kathy   15.50   10
Mark    25      20
Mary    22.50   22
Susie   17      18

后面的样例主要是为了向读者展示Awk能轻松地完成哪些操作——打印域、选择输出、以及数据转换。所以不要认为这些样例就包含了Awk各方面的全部能力,我们也只会对样例做简单解释,而不会详细描述其中的细节。不过到了本章结尾,你应该能有不少收获,后面的章节读起来也会更轻松。

这里我们也做个简化,不给出整个命令行,只给出程序。你可以用上一节教的两种方法之一来执行(放在单引号内或者放文件里面用-f参数)。

Awk里面有两种数据类型:数字和字符串。emp.data 文件很典型——一系列混杂着单词和数字的文本行,中间用空格或tab分隔。

Awk每次从输入中读入一行,并将其分割成域(field)。默认情况下,域是不包含任何空格或tab的字符序列。当前行的第一个域叫做 $1,第二个域是$2,以此类推。整行叫做 $0。每行的域的个数不一定是相同的。

通常我们需要做的是打印每行的几个或者全部域,可能还要做些计算。本节的程序都是这种形式的。

打印每一行

如果动作不带样式,则动作就是打印所有输入行。print 语句会打印出当前行。因此

{ print }

会把所有输入行打印到标准输出。而由于 $0 代表所有域,因此下面的程序也有同样的效果:

{ print $0 }

打印特定的域

单个 print 语句能够在一个输出行中输出多个项。打印每行的第一和第三个域的程序是

{ print $1, $3 }

用emp.data做输入,会得到

Beth 0
Dan 0
Kathy 10
Mark 20
Mary 22
Susie 18

默认情况下,如果 print 语句后面的各表达式之间用逗号分隔,则输出结果的各项之间会用单个空格分隔。而且默认每个print 语句会在打印的每行末尾加入换行符。这两个默认行为都可以修改,后面的例子会有,等不及的话可以参考附录 A.4.2 部分。

NF,域的个数

你可能会觉得 $ 符号只能加个常量编号用来表示域,比如 $1, $2 等等。但实际上任意表达式都能放到 $后面来表示域的编号;Awk会对表达式求值并将其数值作为域的编号。比如,Awk有个内置的变量叫做 NF,它保存了当前输入行中域的个数。因此如下程序

{ print NF, $1, $NF }

会输出三项:域的个数,第一个域和最后一个域。

计算和打印

你可以对域的值进行计算并将它输出。典型的程序如下:

{ print $1, $2 * $3 }

它将每个员工的姓名和收入(时薪乘以工作时长)打印出来。后面我们会让输出好看点。

Beth 0
Dan 0
Kathy 155
Mark 500
Mary 495
Susie 306

打印行号

Awk提供了一个内置变量叫做 NR,它计算到目前为止的行数(记录数)。这样我们就能用 NR 和 $0 来分别表示当前行号和当前行的内容:

{ print NR, $0 }

如果输入是emp.data,输出就是

1 Beth  21       0
2 Dan   19       0
3 Kathy 15.50    10
4 Mark  25       20
5 Mary  22.50    22
6 Susie 17       18

在输出中加入文本

通过在输出列表中加入用双引号包含的字符串,可以在域或值之间输出文本(联想:SQL语句也支持类型机制)。比如

{ print "total pay for", $1, "is", $2 * $3 }

结果是

total pay for Beth is 0
total pay for Dan is 0
total pay for Kathy is 155
total pay for Mark is 500
total pay for Mary is 495
total pay for Susie is 306

在上面的 print 语句中,打印了这三种内容:双引号内的文本,输出域,计算出来的值。

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

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

相关文章

Ubuntu18.04:ORB-SLAM3使用数据集构建地图和保存点云地图

文章目录 保存地图方法一:使用ORB-SLAM3自带的保存方法(oea后缀文件)保存地图方法二:使用PCL库保存为PCD类型地图文件安装PCL库:取巧方法:CMakeLists.txt 文件修改内容:(向该文件内添…

常见的CSS定位技术及使用

目录 1.相对定位(Relative Positioning) 2.绝对定位(Absolute Positioning) 3.子绝父相 4.固定定位(Fixed Positioning) 5.粘性定位(Sticky Positioning) 6.弹性盒子布局&…

跳出Lambda表达式forEach()循环解决思路

背景 在一次需求开发时&#xff0c;发现使用Lambda的forEach()跳不出循环。如下示例代码&#xff0c;想在遍历满足条件时跳出循环。 public static void main(String[] args) {List<Integer> list Arrays.asList(1, 4, 5, 7, 9, 11);list.forEach(e -> {if (e % 2 …

ip route get ip地址 应用案例

应用场景 在做虚拟化实验用的虚拟机和实际的ECS云主机一般都会有多个网卡&#xff0c;网络的联通性是经常碰到的问题。比如在一个VM上有3个网卡&#xff0c;分别为ens160(和寄主机进行桥接的网卡10.0.0.128)、ens224&#xff08;连接仅主机网络10.0.0.0/24的网卡10.0.0.128&…

C++中几种处理函数返回值的方式

目录 C中几种处理函数返回值的方式&#xff1a;值返回引用返回指针返回总结 C中几种处理函数返回值的方式&#xff1a; 值返回 函数可以返回一个具体的值&#xff0c;例如整数、浮点数、结构体、类对象等。返回值被复制到函数调用点&#xff0c;在调用点可以直接使用或赋给其…

C语言面试题值反转字符串

知识捡漏本 1.C语言优先级 &#xff1a;左高于高于 右 2.定义宏函数product&#xff0c;调用product后&#xff0c;里面的i和i都是加两次1&#xff0c;i就是两个加2后的i相乘&#xff0c;i是开始的i和1后的i相乘。 3.用i (j4,k 8,m 16);这种定义方法&#xff0c;最终i和最后一…

2023最新Python重点知识万字汇总

这是一份来自于 SegmentFault 上的开发者 二十一 总结的 Python 重点。由于总结了太多的东西&#xff0c;所以篇幅有点长&#xff0c;这也是作者"缝缝补补"总结了好久的东西。 **Py2 VS Py3** * print成为了函数&#xff0c;python2是关键字* 不再有unicode对象…

AI图像行为分析算法 opencv

AI图像行为分析算法通过pythonopencv深度学习框架对现场操作行为进行全程实时分析&#xff0c;AI图像行为分析算法通过人工智能视觉能够准确判断出现场人员的作业行为是否符合SOP流程规定&#xff0c;并对违规操作行为进行自动抓拍告警。OpenCV是一个基于Apache2.0许可&#xf…

【Linux】多路IO转接问题-select

select&#xff1a; 首先设置一个lfd绑定服务端地址结构&#xff0c;用于监听新的连接。select函数调用&#xff0c;用于对整个fd数组进行监听&#xff0c;该数组最大限制1024&#xff0c;通过遍历&#xff0c;来确定是哪个fd有变化&#xff1a; 1.如果是lfd&#xff1a;那么可…

Python编程练习与解答 练习93:在终端窗口居中一个显示字符串

编写一个函数&#xff0c;以字符串s作为第一个参数&#xff0c;以窗口的字符宽度w作为第二个参数。函数将返回一个新字符串&#xff0c;其中包括所需的前导空格&#xff0c;以便在打印时新字符串s在窗口居中显示。新字符串的构造方法如下&#xff1a; 如果s的长度大于或等于窗口…

Python基础以及代码

Python基础以及代码 1.第一个代码如下&#xff1a; # 项目&#xff1a;第一个项目 # 作者&#xff1a;Adair # 开放时间&#xff1a; 2023/8/15 21:52print("Hello,world!!")如图所示&#xff1a; 2.数字的代码如下&#xff1a; # 项目&#xff1a;演示第一个项…

自然语言处理(六):词的相似性和类比任务

词的相似性和类比任务 在前面的章节中&#xff0c;我们在一个小的数据集上训练了一个word2vec模型&#xff0c;并使用它为一个输入词寻找语义相似的词。实际上&#xff0c;在大型语料库上预先训练的词向量可以应用于下游的自然语言处理任务&#xff0c;为了直观地演示大型语料…

Kubernetes技术--k8s核心技术 Secret

1.概述 Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中。Secret可以以 Volume 或者环境变量的方式使用。 作用 加密数据存储在/etc中,使得pod容器以挂载volume方式进行访问。在进行的数据存储中是以base64加密的方式…

C++ struct 笔记(超级详细)

今日碎碎念&#xff1a;我在学C语言时经常用到结构体struct&#xff0c;之后在写C程序时遇到在struct中定义构造函数和成员函数的情况&#xff0c;这在c语言中是从未遇到过的&#xff0c;觉得奇怪&#xff0c;想到之前并没有真正系统学习C里的struct&#xff0c;有必要今天详细…

leetcode - 360周赛

一&#xff0c;2833. 距离原点最远的点 这道题的意思是&#xff0c;遇到 "L" 向左走&#xff0c;遇到 "R" 向右走&#xff0c;遇到 "_" 左右都可以走&#xff0c;那么要想找到距离原点最远的点&#xff0c;就是在找 | "L" "R&qu…

P1093 [NOIP2007 普及组] 奖学金

题目描述 某小学最近得到了一笔赞助&#xff0c;打算拿出其中一部分为学习成绩优秀的前 5 5 5 名学生发奖学金。期末&#xff0c;每个学生都有 3 3 3 门课的成绩:语文、数学、英语。先按总分从高到低排序&#xff0c;如果两个同学总分相同&#xff0c;再按语文成绩从高到低排…

代码随想录 - Day31 - 回溯:组合问题

代码随想录 - Day31 - 回溯&#xff1a;组合问题 77. 组合 最容易想到的&#xff1a;k层for循环。 显然不能写那么多层for循环&#xff0c;所以该方法pass 使用回溯法&#xff1a; 用递归解决嵌套层数的问题 n相当于树的宽度&#xff0c;k相当于树的深度。 找到最深处的叶子节…

纵行科技与山鹰绿能达成合作,提供物联网资产管理数据服务

近日&#xff0c;纵行科技与山鹰绿能宣布双方达成深度合作关系&#xff0c;纵行科技将为山鹰绿能提供专业的物联网技术服务&#xff0c;使用物联网技术帮助山鹰绿能对循环包装载具等资产进行在线管理和数字化运营。 据悉&#xff0c;山鹰绿能是一家由山鹰国际控股的全资子公司…

前端将UTC时间格式转化为本地时间格式~~uniapp写法

UTC时间格式是什么 首先我们先简单的了解一下&#xff1a;UTC时间&#xff08;协调世界时&#xff0c;Coordinated Universal Time&#xff09;使用24小时制&#xff0c;以小时、分钟、秒和毫秒来表示时间 HH:mm:ss.SSSHH 表示小时&#xff0c;取值范围为00到23。mm 表示分钟…

Compose学习 - 环境配置及compose、kotlin插件、gradle、AndroidStudio版本对应关系

最近学习Compose&#xff0c;一开始学习的Compose版本是1.1.1&#xff0c;学习的过程中发现&#xff0c; LazyHorizontalGrid这个方法只有在1.2.0以后版本才支持。 想着既然要升级&#xff0c;直接用最新的好了。后面按照官网建议&#xff0c;下载了最新的AndroidStudio&#…