- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
本章节,我们使用一些常见的实例来介绍 AWK 的一些常见用法。
在我们继续之前,请先确保当前目录下存在一个文件 employee.txt,里面的内容如下
1) 张三 技术部 23
2) 李四 人力部 22
3) 王五 行政部 23
4) 赵六 技术部 24
5) 朱七 客服部 23
AWK是一个行处理器,但是却是一个列输出器。对于 AWK 来说,默认的分割符是空白符号,包括 "\t" 和空格 " "。
而且,当 AWK 使用分割符对每一行进行分割后,会对每一列/字段进行编号,取名 $
1 $
2 $
3 $
4,所见即所得的第一列,第二列,第三列.....
而 $
0 则表示一整行。
于是,上面的文本编列如下
$1 $2 $3 $4
1) 张三 技术部 23 $0
之前的代码,我们都是使用 print $
0 来输出整行,其实,我们可以用 print $
column_n 来输出一列或者其中的某些列。
例如,如果要输出第二列,也就是名字列,则可以使用 print $
2
例如,如果我们要输出第一列和第三列,且使用制表符作为列分割符,则可以使用 print $
1 "\t" $
3
注意 "\t" 必须使用双引号引起来.
[www.ddkk.com]$ awk '{print $1 "\t" $3}' employee.txt
运行上面的代码,输出结果如下
1) 技术部
2) 人力部
3) 行政部
4) 技术部
5) 客服部
我们前面有提到,AWK 的主体代码包括两大部分,模式和 AWK 语句
/pattern/ {awk-commands}
模式和语句都是可选的,但,必须存在其一。它们之间有几大规则
1、 模式部分,是正则字符串匹配;
2、 AWK语句部分,是模式部分匹配成功后要执行的语句;
3、 如果模式部分省略,则默认每一行都匹配,也就是每一行都会被AWK语句执行;
4、 如果语句部分省略,那么默认的语句就是输出行,也就是print $
0;
例如,下面的 awk 命令,用于输出行总包行 “术” 的行
[www.ddkk.com]$ awk '/术/ {print $0}' employee.txt
运行上面的代码,输出结果如下
1) 张三 技术部 23
4) 赵六 技术部 24
因为AWK 语句部分可以省略,因此,上面的命令可以参略为
[www.ddkk.com]$ awk '/术/' employee.txt
运行上面的代码,输出结果如下
1) 张三 技术部 23
4) 赵六 技术部 24
需要注意的是,/pattern/ 模式匹配是针对整行的,从某些方面说,是针对 $
0 的。
我们还可以在行匹配模式之后,输出其中的某一列或者某几列。
例如,下面的命令,在行匹配之后,输出第二列和第三列,并且使用制表符分隔。
[www.ddkk.com]$ awk '/术/ {print $1 "\t" $3}' employee.txt
运行上面的命令,输出结果如下
1) 技术部
4) 技术部
因为AWK 对每一列的分割在 BEGIN 语句执行完毕后就已经分割好了,因此我们在 AWK 主体代码中可以按照任意顺序把 $
0.... $
n 传递给 print 函数
比如我们要想要先输出第三列,然后输出第一列,那么可以使用下面的命令
[www.ddkk.com]$ awk '/术/ {print $3 "\t" $1}' employee.txt
运行上面的代码,输出结果如下
技术部 1)
技术部 4)
AWK中的所有变量都不需要实现初始化,因为 AWK 发现它们如果没有初始化,则会自动初始化为 0
因此我们可以使用 {++count} 或者 {count++} 或者 {count = count+1} 来统计行数
[www.ddkk.com]$ awk '/术/ {count = count+1} END {print "Count = ", count}' employee.txt
运行上面的命令,输出结果如下
Count = 2
AWK提供了一个内建的函数 length( $
arg) 用于返回字符串 $
arg 的总长度
如果要获取某行的总长度,可以使用下面的语法
length($0)
同样的,如果要获取某列/字段的总长度,可以使用语法 length( $
n)
如果要判断某行的字符是否大于/小于/等于 N ,可以使用下面的语法
length($0) > N
例如,如果要输出输出总长度大于 18 的行,可以使用下面的命令
[www.ddkk.com]$ awk 'length($0) > 18' employee.txt
因为所有的行的总长度都大于 18,因此输出结果如下
1) 张三 技术部 23
2) 李四 人力部 22
3) 王五 行政部 23
4) 赵六 技术部 24
5) 朱七 客服部 23
对于上面的输出,大家是不是很疑惑,length( $
0) >18 只是一个条件语句,并没有输出语句 print(
$` 0) 为什么会输出每一行?
这是因为,AWK 中的条件语句,如果没有实际的条件执行代码,那么会有一个默认的执行代码,就是 print( $
0),也就是输出当前行。
如何将十进制数字转换为mixed radix表示法? 我猜想给定每个基数数组的输入和十进制数,它应该输出每列值的数组。 最佳答案 伪代码: bases = [24, 60, 60] input = 8
我有 Table-A,其中有“x”行。 (对于这个例子有 8 行) 我通过使用游标创建了列数为“x”的Table-C。 (使其动态化;如果将更多行添加到 Table-A,则会在 Table-C 中创建
我有一个关于对象的(很可能是简单而愚蠢的)问题。我创建了实例“Person”的对象“jon”。当我打电话时 console.log(jon.name) 控制台会给我输出“jon”。到目前为止,一切都很
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: javascript function vs. ( function() { … } ()); 抱歉,如果这太基础了
我正在尝试用 Java 重新创建射弹轨迹,但是,我遇到了一些问题。我看过很多解释公式之类的视频,但他们的方程中有一个目标,而我没有。我的意思是,他们有一个范围来计算子弹的下落,但我试图弄清楚子弹最终会
(希望如此)来自一个完整的 Rust 初学者的一个简单问题。我的循环有什么问题? num 计算结果为“69”的速度相当快,但是一旦 num 设置为“69”,循环就永远不会退出。我肯定遗漏了一些明显的东
我在 id="name"的元素上应用“.length”,但它计数为 29 而不是 14。我想知道我的错误在哪里?如果有人可以让我知道,那就太好了。谢谢! var name=document.getEl
我知道这很简单,但由于某种原因我无法让它工作。我正在尝试在 Java 中创建自定义颜色,但它似乎不起作用。 import java.awt.Color; Color deepGreen = new C
我有一个大文件,其中每一行都包含一个子字符串,例如 ABC123。如果我执行 grep ABC file.txt 或 grep ABC1 file.txt 我按预期返回这些行,但如果我执行 grep
我想将以下实体映射转换为 Priority 对象。在 getter 上,当我将“Short”更改为“Priority”并遵循 this.priority 时,它会提示 'basic' 属性类型不应该是
我正在开发一个相当基本的函数,我发现很难弄清楚为什么我会得到我的输出。 def mystery(n): print(n) if n < 4: my
我正在尝试对 WordPress 安装的新闻部分实现同位素过滤。我是 JavaScript/jQuery 的新手,正在尝试随时随地学习。我首先使用 Filters section of the Iso
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我在另一个实体类中引用一个实体并收到此错误。下面是示例代码。我在 persistence.xml 中也有这些类。 是什么导致了这个问题?我正在使用 Spring 数据 JPA 和 Hibernate。
我正在解析 HTML 并重新格式化图像以使其更好地适应。由于某种原因,当我有多个图像需要解析时,我会超出范围,而且我一生都无法弄清楚为什么。 当 imgArray.count >1 时,我将使用带有递
我是 SQL 新手,正在尝试创建一个基本的子查询。我需要找出经理的平均年龄和实习生的平均年龄之间的差异。 标题为一栏 - 经理或实习生年龄是一列,全部在同一个表中。 我会使用两个子查询来做类似的事情:
我习惯了 csh,所以不得不使用 bash 有点烦人。这段代码有什么问题? if[$time > 0300] && [$time 和 300 && time < 900 )) then mod
我建立了这个页面:http://excelwrestling.com/poola.php即将到来的双重锦标赛。我的大部分数据都是从我的 mySQL 数据库中提取的,现在只有一些示例数据。 我希望链接选
是否有任何原因导致以下内容不起作用: for (i=0;i < someArray.length;i++) { if (someArray[i].indexOf("something") !=
我现在正在学习 Javascript,有一个问题一直困扰着我! 因此,我在这里所需要做的就是在此输入框中键入颜色,单击按钮并将标题更改为键入的颜色(仅当键入的颜色位于变量中指定的数组中时)。 我的代码
我是一名优秀的程序员,十分优秀!