专栏首页Opensource翻译专栏intermediate awk 脚本指南【Linux-Command line】

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

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

本文探讨了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

原文链接:https://opensource.com/article/19/11/intermediate-awk-scripting

原文作者:Seth Kenlon(Red Hat),Dave Morris,Robert Young

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AWK 入门简明教程

    KangVcar
  • docker:(2)通过Dockerfile构建镜像并发布web项目

    上一篇讲解了docker的基本使用 http://www.cnblogs.com/xiaochangwei/p/8204511.html

    肖哥哥
  • shell十三问,为linux学习打基础(一)

    本文整理并转自CU上的帖子[学习共享] shell 十三問?,此贴是2003年发表的,但却是相当不错的linux基础知识汇集贴,原帖主使用的台湾风格,本文加以简...

    小小科
  • 一个月学会Python的Quora指南和资料放送

    如何一个月学会使用Python 文章翻译自Quora上的回帖,略有改动。 原文链接:https://www.quora.com/What-are-the-bes...

    生信宝典
  • 看各路神仙如何大战MySQL insecure warning报警有感

    一、问题由来 mysql在5.6.5上开始在命令行中直接填入用户密码会提示错误,例如: $./mysql -h10.10.30.18 -uwoqutech -p...

    沃趣科技
  • AWK中的字段,记录和变量【Programming】

    本文为awk入门系列的第二篇文章,在本篇文章中,你可以了解到有关字段,记录和一些功能强大的awk变量。

    Potato
  • Python_Nginx

    py3study
  • GitHub五万星登顶,程序员命令行最全技巧宝典!

    最近两天,「The Art of Command Line(命令行的艺术)」这个开源项目雄踞了 GitHub TOP 榜,直接以 51,727 Star 登上榜...

    AI科技大本营
  • while read line - [linux学习]

    循环中的重定向 或许你应该在其他脚本中见过下面的这种写法: while read line do … done < file ...

    逐梦的青春

扫码关注云+社区

领取腾讯云代金券