图片来自Wallhaven的420BongHits
Linux 中有一个命令功能强大到不能称为命令——awk。它实际上是一种用于 Linux 中文本处理的脚本语言。
掌握它awk是一个长期的旅 程,因为它有很多选项、语法和复杂的用法。当然,您可以转到其官方用户手册页面并查看它们。但是它的手册是一个超长的页面,不是吗?很少有人能一口气读完。
这就是为什么这篇文章会让你的生活更轻松。没有必要记住它的所有选项和语法。您只需要知道它可以做什么以及一些常见用法。
这篇文章,根据我自己的经验,将向你介绍awk在 8 个难度级别中使用所需的常用知识和最低知识。
基本上,一切都将从一个awk关键字开始,然后是一个awk用单引号括起来的程序。最后,它是该awk命令将处理的文件的名称。
在单引号内,有两种类型的程序:“模式”和“动作”。模式用于搜索文件中的某些文本。一个动作,顾名思义,就是用来做一些操作的。
所以,有以下三种用途awk:
awk '{action}' 文件名
awk '模式' 文件名
awk '模式 {action}' 文件名
如上所示,为了区分模式和动作,动作将用花括号括起来。
现在,我们已经有了基本的背景知识awk。让我们深入了解其用法的更多细节。
这是一个名为的文件yang.txt,它将作为本文的示例文件。它的内容是:
现在,让我们为它执行一个简单的awk操作:
如上例所示,我们可以使用该-F选项来定义输入分隔符(在我们的例子中是:),默认情况下是空格。由于我们使用:分隔符,因此每行中有两个单词(或称为字段)。$NUMBER语法是指定我们将使用哪个字段。
关于$NUMBER语法,我们需要知道一些事情:
BEGINandEND关键字在awk程序中有特殊用途。正如它们的名字所暗示的,我们可以在动作的开始和结束时添加一些额外的动作。
上面的示例在操作之前和之后打印了一些有用的信息{print $0}。实际上,我们也可以在BEGINaction 中定义输入分隔符,而不是使用-F选项,这样可以让程序更简洁:
里面有一些内置函数awk。我们可以直接在动作上使用它们。例如,要将所有字符转换为大写,我们可以使用toupper()如下函数:
所有内置函数的完整列表在官方手册中。
正如我所说,awk它是一种脚本语言,因为该if-else语句是所有语言的必备条件,awk因此也支持它。
如果一行文本的第一个字段等于“名称”,则以下示例打印第二个字段。
我们还可以添加一个else语句:
现在,让我们继续讨论模式。令人awk惊奇的是它支持正则表达式,因此我们可以根据需要通过各种方式搜索文本。
基本上,我们可以将我们需要的正则表达式放入//如下:
默认情况下,该模式将尝试匹配每一行的整个文本。如果我们想匹配一个特定的字段,只需在模式的开头添加它,不要忘记一个特殊~的遵循awk.
如上所示,该模式$1 ~ /e$/仅匹配每一行的第一个字段。
现在,是时候结合模式和行动了。没有什么特别的,只是通过用花括号括起来的动作来区分模式和动作:
注意模式和动作的顺序。对于上面的例子,如果我们先执行动作然后执行模式,结果将完全不同。
掌握的目的awk不仅仅是写一些简单的一行命令。就是写Linux脚本。
awk现在,我们已经对count_words.awk.
现在,让我们执行它来计算 上有多少单词yang.txt:
awk是 Linux 中一种强大的脚本语言。这篇文章只是展示了冰山一角。在你遇到它的第一天就掌握它是不可能的。一个更好的学习策略是先通过一些简单的例子来理解它的基本语法,然后你可以查看它的综合官方手册来了解更复杂的用法。
谢谢阅读。如果喜欢,请关注我,成为Medium会员,享受更多精彩文章。
更多关于 Linux 的文章:
页面更新:2024-04-22
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号