前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >intermediate awk 脚本指南【Linux-Command line】

intermediate awk 脚本指南【Linux-Command line】

作者头像
QRosie
修改2019-11-14 17:24:24
1.4K0
修改2019-11-14 17:24:24
举报
文章被收录于专栏:Opensource翻译专栏

了解如何将命令构造为可执行脚本。

本文探讨了awk的功能,它们更简单易用,只要你知道如何将命令结构化为可执行脚本。

逻辑运算符和条件

你可以使用逻辑运算符“and”(写作“&&”)和“or”(写作“||”)为条件添加特异性。

例如,要选择和仅打印第二列中具有字符串“ purple”且第三列中少于五的记录:

如果记录在第二列中具有“purple”,但在第三列中具有大于五的值,则该记录不会被选中。 同样,如果一条记录符合第三列的要求,但在第二列中缺少“purple”,则该记录也不会被选中。

Next命令

假设你要选择文件中数量大于或等于8的每条记录,并打印带有两个星号(**)的匹配记录。 你还希望标记出值介于5(包含5)和8之间且仅带有一个星号(*)的每条记录。 有几种方法可以执行此操作,一种方法是使用next命令来指示awk,它在执行操作后应停止扫描并继续处理下一条记录。

以此为例:

BEGIN命令

使用BEGIN命令可以在awk开始扫描文本文件之前打印和设置变量。 例如,你可以通过在BEGIN语句中定义awk脚本来设置输入和输出字段分隔符。 本示例将上一篇文章中的简单脚本改编为一个文件,该文件的字段用逗号而不是空格分隔:

END命令

像BEGIN一样,END命令使你可以在完成对正在处理的文本文件的扫描后,在awk中执行操作。 如果要在所有记录中打印某些值的累积结果,则只有在扫描和处理所有记录后才能执行此操作。

BEGIN和END命令每个仅运行一次。 它们之间的所有规则在每个记录上运行零次或多次。 换句话说,大多数awk脚本是一个循环,该循环在你正在处理的文本文件的每个新行中执行。BEGIN和END规则除外,它们在循环之前和之后运行。

这是一个没有END命令就无法实现的示例。 该脚本接受df Unix命令的输出值,并为每个新记录增加两个自定义变量(used和available)。

将脚本另存为total.awk并尝试:

used和available变量的作用类似于许多其他编程语言中的变量。 你可以在不声明其类型的情况下随意创建它们,并任意为其添加值。 在循环结束时,脚本将各个列中的记录加在一起,并打印总数。

Math

到目前为止,你可能已经从所有逻辑运算符和随意计算中得知,awk很自然地进行了数学运算。 可以说,这使其成为你的终端机非常有用的计算器。 你无需费力记住bc的语法,只需将awk及其特殊的BEGIN函数一起使用,就可以避免使用file参数:

不可否认,对于简单(和不那么简单)的数学来说,仍需很多键入工作,但是编写前端并不需要花费很多精力,这是你要探索的练习。

本文改编自社区技术播客Hacker Public Radio

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 逻辑运算符和条件
  • Next命令
  • BEGIN命令
  • END命令
  • Math
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档