欢迎大家来到IT世界,在知识的湖畔探索吧!
欢迎大家来到IT世界,在知识的湖畔探索吧!
图片来自Wallhaven的420BongHits
Linux 中有一个命令功能强大到不能称为命令——awk。它实际上是一种用于 Linux 中文本处理的脚本语言。
掌握它awk是一个长期的旅程,因为它有很多选项、语法和复杂的用法。当然,您可以转到其官方用户手册页面并查看它们。但是它的手册是一个超长的页面,不是吗?很少有人能一口气读完。
这就是为什么这篇文章会让你的生活更轻松。没有必要记住它的所有选项和语法。您只需要知道它可以做什么以及一些常见用法。
这篇文章,根据我自己的经验,将向你介绍awk在 8 个难度级别中使用所需的常用知识和最低知识。
0. 了解 awk 命令的结构
基本上,一切都将从一个awk关键字开始,然后是一个awk用单引号括起来的程序。最后,它是该awk命令将处理的文件的名称。
在单引号内,有两种类型的程序:“模式”和“动作”。模式用于搜索文件中的某些文本。一个动作,顾名思义,就是用来做一些操作的。
所以,有以下三种用途awk:
1.只执行一个动作
awk '{action}' 文件名
欢迎大家来到IT世界,在知识的湖畔探索吧!
2. 仅根据模式搜索文本
欢迎大家来到IT世界,在知识的湖畔探索吧!awk '模式' 文件名
3.结合模式和动作的使用
awk '模式 {action}' 文件名
如上所示,为了区分模式和动作,动作将用花括号括起来。
现在,我们已经有了基本的背景知识awk。让我们深入了解其用法的更多细节。
1.直接运行Action
这是一个名为的文件yang.txt,它将作为本文的示例文件。它的内容是:
现在,让我们为它执行一个简单的awk操作:
如上例所示,我们可以使用该-F选项来定义输入分隔符(在我们的例子中是:),默认情况下是空格。由于我们使用:分隔符,因此每行中有两个单词(或称为字段)。$NUMBER语法是指定我们将使用哪个字段。
关于$NUMBER语法,我们需要知道一些事情:
- 它从而$1不是开始$0。($1是第一个字段,$2是第二个字段,依此类推。)
- $0代表整行的文本。
- $NF代表最后一个字段。所以我们可以使用$(NF-1)倒数第二个,以此类推。
2. 添加开始和结束动作
BEGINandEND关键字在awk程序中有特殊用途。正如它们的名字所暗示的,我们可以在动作的开始和结束时添加一些额外的动作。
上面的示例在操作之前和之后打印了一些有用的信息{print $0}。实际上,我们也可以在BEGINaction 中定义输入分隔符,而不是使用-F选项,这样可以让程序更简洁:
3. 使用内置函数
里面有一些内置函数awk。我们可以直接在动作上使用它们。例如,要将所有字符转换为大写,我们可以使用toupper()如下函数:
所有内置函数的完整列表在官方手册中。
4. 在操作中使用 If-Else 语句
正如我所说,awk它是一种脚本语言,因为该if-else语句是所有语言的必备条件,awk因此也支持它。
如果一行文本的第一个字段等于“名称”,则以下示例打印第二个字段。
我们还可以添加一个else语句:
5. 在模式中使用正则表达式
现在,让我们继续讨论模式。令人awk惊奇的是它支持正则表达式,因此我们可以根据需要通过各种方式搜索文本。
基本上,我们可以将我们需要的正则表达式放入//如下:
默认情况下,该模式将尝试匹配每一行的整个文本。如果我们想匹配一个特定的字段,只需在模式的开头添加它,不要忘记一个特殊~的遵循awk.
如上所示,该模式$1 ~ /e$/仅匹配每一行的第一个字段。
6. 结合模式和行动
现在,是时候结合模式和行动了。没有什么特别的,只是通过用花括号括起来的动作来区分模式和动作:
注意模式和动作的顺序。对于上面的例子,如果我们先执行动作然后执行模式,结果将完全不同。
7. 编写可执行的 awk 脚本
掌握的目的awk不仅仅是写一些简单的一行命令。就是写Linux脚本。
awk现在,我们已经对count_words.awk.
现在,让我们执行它来计算 上有多少单词yang.txt:
结论
awk是 Linux 中一种强大的脚本语言。这篇文章只是展示了冰山一角。在你遇到它的第一天就掌握它是不可能的。一个更好的学习策略是先通过一些简单的例子来理解它的基本语法,然后你可以查看它的综合官方手册来了解更复杂的用法。
谢谢阅读。如果喜欢,请关注我,成为Medium会员,享受更多精彩文章。
更多关于 Linux 的文章:
Linux 大师
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/81371.html