专栏首页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 条评论
登录 后参与评论

相关文章

  • 3个用于从命令行进行演示的工具【Linux-Command line】

    mdp,tpp和send可能不会为你赢得任何设计大奖,但是它们会为你提供可以从终端运行的基本幻灯片。

    QRosie
  • Linux chgrp和newgrp命令简介【Linux-Command line】

    在近期的文章中,我介绍了chown命令,该命令用于修改系统上文件的所有权。 回想一下,所有权是分配给对象的用户和组的组合。 chgrp和newgrp命令为管理需...

    QRosie
  • 如何将用户添加到Linux桌面【Linux-Command line】

    我在 useradd command 上发布的文章阐述了对Linux系统用户管理的深层理解。Useradd 是一个命令行工具,但你也可以在Linux上通过图形方...

    QRosie
  • Django+Django-Celery+Celery的整合实战

    本篇文章主要是由于计划使用django写一个计划任务出来,可以定时的轮换值班人员名称或者定时执行脚本等功能,百度无数坑之后,终于可以凑合把这套东西部署上。本人英...

    菲宇
  • 小朋友学C++(19):函数模板

    在了解模板之前,咱们先来求一下两个 int型的和,两个float型的和,两个double型的和

    海天一树
  • MySQL中InnoDB及索引深入剖析

    我的博客: https://www.luozhiyun.com/archives/273

    luozhiyun
  • 为什么云计算DBaaS是企业数据库管理的未来

    随着内部部署数据库基础设施和传统数据库管理系统的衰落,其逐渐被在云平台中运行的灵活、可扩展、经济高效的数据库管理系统所取代。

    静一
  • TP6怎么对接分布式数据库

    在一些大型应用中,一般会使用到分布式数据库。那么,TP6又是怎么对接分布式数据库的呢?想要对接分布式数据库,就要配置相应的参数【deploy】来开启分布式数据库...

    邂逅千寻
  • 哥哥面前一条弯弯的河 --「JDBC」连接数据库

    阿凯
  • wordpress网站搬家教程和方法

    wordpress网站搬家教程详解,不管你使用的是虚拟主机还是你使用的是服务器,wordpress站点的搬家过程基本一致,总体来说就是这么几个关键的步骤;记住他...

    wordpress建站吧

扫码关注云+社区

领取腾讯云代金券