awk 系列:如何使用 awk 比较操作符

对于 使用 awk 命令的用户来说,处理一行文本中的数字或者字符串时,使用比较运算符来过滤文本和字符串是十分方便的。

在 awk 系列的此部分中,我们将探讨一下如何使用比较运算符来过滤文本或者字符串。如果你是程序员,那么你应该已经熟悉了比较运算符;对于其它人,下面的部分将介绍比较运算符。

awk 中的比较运算符是什么?

awk 中的比较运算符用于比较字符串和或者数值,包括以下类型:

  • > – 大于
  • < – 小于
  • >= – 大于等于
  • <= – 小于等于
  • == – 等于
  • != – 不等于
  • some_value ~ / pattern/ – 如果 some_value 匹配模式 pattern,则返回 true
  • some_value !~ / pattern/ – 如果 some_value 不匹配模式 pattern,则返回 true

现在我们通过例子来熟悉 awk 中各种不同的比较运算符。

在这个例子中,我们有一个文件名为 food_list.txt 的文件,里面包括不同食物的购买列表。我想给食物数量小于或等于 30 的物品所在行的后面加上(**)


  1. File – food_list.txt
  2. No Item_Name Quantity Price
  3. 1 Mangoes 45 $3.45
  4. 2 Apples 25 $2.45
  5. 3 Pineapples 5 $4.45
  6. 4 Tomatoes 25 $3.45
  7. 5 Onions 15 $1.45
  8. 6 Bananas 30 $3.45

Awk 中使用比较运算符的通用语法如下:


  1. # 表达式 { 动作; }

为了实现刚才的目的,执行下面的命令:


  1. # awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt
  2. No Item_Name` Quantity Price
  3. 1 Mangoes 45 $3.45
  4. 2 Apples 25 $2.45 **
  5. 3 Pineapples 5 $4.45 **
  6. 4 Tomatoes 25 $3.45 **
  7. 5 Onions 15 $1.45 **
  8. 6 Bananas 30 $3.45 **

在刚才的例子中,发生如下两件重要的事情:

  • 第一个“表达式 {动作;}”组合中, $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } 打印出数量小于等于30的行,并且在后面增加(**)。物品的数量是通过 $3 这个域变量获得的。
  • 第二个“表达式 {动作;}”组合中, $3 > 30 { print $0 ;} 原样输出数量小于等于 30 的行。

再举一个例子:


  1. # awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20 { print $0 ;} ' food_list.txt
  2. No Item_Name Quantity Price
  3. 1 Mangoes 45 $3.45
  4. 2 Apples 25 $2.45
  5. 3 Pineapples 5 $4.45 TRUE
  6. 4 Tomatoes 25 $3.45
  7. 5 Onions 15 $1.45 TRUE
  8. 6 Bananas 30 $3.45

在这个例子中,我们想通过在行的末尾增加 (TRUE) 来标记数量小于等于20的行。

原文发布时间为:2016-07-22

本文来自合作伙伴“Linux中国”

时间: 2024-08-10 17:18:24

awk 系列:如何使用 awk 比较操作符的相关文章

awk系列:在awk中如何使用流程控制语句

当你回顾所有到目前为止我们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各种实例的所有指令是顺序执行的,即一个接一个地执行.但在某些情况下,我们可能希望基于一些条件进行文本过滤操作,即流程控制语句允许的那些语句. 在 awk 编程中有各种各样的流程控制语句,其中包括: if-else 语句 for 语句 while 语句 do-while 语句 break 语句 continue 语句 next 语句 nextfile 语句 exit 语句 然而,对于本系列的这一部分,我们将阐述:

awk 系列:在 awk 中如何使用流程控制语句

当你回顾所有到目前为止我们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各种实例的所有指令是顺序执行的,即一个接一个地执行.但在某些情况下,我们可能希望基于一些条件进行文本过滤操作,即流程控制语句允许的那些语句. 在 awk 编程中有各种各样的流程控制语句,其中包括: if-else 语句 for 语句 while 语句 do-while 语句 break 语句 continue 语句 next 语句 nextfile 语句 exit 语句 然而,对于本系列的这一部分,我们将阐述:

awk 系列:如何使用 awk 输出文本中的字段和列

在 Awk 系列的这一节中,我们将看到 awk 最重要的特性之一,字段编辑. 首先我们要知道,Awk 能够自动将输入的行,分隔为若干字段.每一个字段就是一组字符,它们和其他的字段由一个内部字段分隔符分隔开来. Awk 输出字段和列 如果你熟悉 Unix/Linux 或者懂得 bash shell 编程,那么你应该知道什么是内部字段分隔符(IFS)变量.awk 中默认的 IFS 是制表符和空格. awk 中的字段分隔符的工作原理如下:当读到一行输入时,将它按照指定的 IFS 分割为不同字段,第一组

awk 系列:怎样使用 awk 变量、数值表达式以及赋值运算符

我觉得 awk 系列 将会越来越好,在本系列的前七节我们讨论了在 Linux 中处理文件和筛选字符串所需要的一些 awk 命令基础. 在这一部分,我们将会进入 awk 更高级的部分,使用 awk 处理更复杂的文本和进行字符串过滤操作.因此,我们将会讲到 Awk 的一些特性,诸如变量.数值表达式和赋值运算符. 学习 Awk 变量,数值表达式和赋值运算符 你可能已经在很多编程语言中接触过它们,比如 shell,C,Python 等:这些概念在理解上和这些语言没有什么不同,所以在这一小节中你不用担心很

awk 系列:如何使用 awk 复合表达式

一直以来在查对条件是否匹配时,我们使用的都是简单的表达式.那如果你想用超过一个表达式来查对特定的条件呢? 本文中,我们将看看如何在过滤文本和字符串时,结合多个表达式,即复合表达式,用以查对条件. awk 的复合表达式可由表示"与"的组合操作符 && 和表示"或"的 || 构成. 复合表达式的常规写法如下: ( 第一个表达式 ) && ( 第二个表达式 ) 这里只有当"第一个表达式" 和"第二个表达式&qu

awk系列:如何让awk使用 Shell 变量

当我们编写 shell 脚本时,我们通常会在脚本中包含其它小程序或命令,例如 awk 操作.对于 awk 而言,我们需要找一些将某些值从 shell 传递到 awk 操作中的方法. 我们可以通过在 awk 命令中使用 shell 变量达到目的,在 awk 系列的这一节中,我们将学习如何让 awk 使用 shell 变量,这些变量可能包含我们希望传递给 awk 命令的值. 有两种可能的方法可以让 awk 使用 shell 变量: 1. 使用 Shell 引用 让我们用一个示例来演示如何在一条 aw

awk 系列:如何使用 awk 按模式筛选文本或字符串

作为 awk 命令系列的第三部分,这次我们将看一看如何基于用户定义的特定模式来筛选文本或字符串. 在筛选文本时,有时你可能想根据某个给定的条件或使用一个可被匹配的特定模式,去标记某个文件或数行字符串中的某几行.使用 awk 来完成这个任务是非常容易的,这也正是 awk 中可能对你有所帮助的几个功能之一. 让我们看一看下面这个例子,比方说你有一个写有你想要购买的食物的购物清单,其名称为 food_prices.list,它所含有的食物名称及相应的价格如下所示: $ cat food_prices.

awk系列:如何使用awk的特殊模式 BEGIN 和 END

在 awk 系列的第八节,我们介绍了一些强大的 awk 命令功能,它们是变量.数字表达式和赋值运算符. 本节我们将学习更多的 awk 功能,即 awk 的特殊模式:BEGIN 和 END. 随着我们逐渐展开,并探索出更多构建复杂 awk 操作的方法,将会证明 awk 的这些特殊功能的是多么强大. 开始前,先让我们回顾一下 awk 系列的介绍,记得当我们开始这个系列时,我就指出 awk 指令的通用语法是这样的: # awk 'script' filenames  在上述语法中,awk 脚本拥有这样

awk 系列:如何让 awk 使用 Shell 变量

当我们编写 shell 脚本时,我们通常会在脚本中包含其它小程序或命令,例如 awk 操作.对于 awk 而言,我们需要找一些将某些值从 shell 传递到 awk 操作中的方法. 我们可以通过在 awk 命令中使用 shell 变量达到目的,在 awk 系列的这一节中,我们将学习如何让 awk 使用 shell 变量,这些变量可能包含我们希望传递给 awk 命令的值. 有两种可能的方法可以让 awk 使用 shell 变量: 1. 使用 Shell 引用 让我们用一个示例来演示如何在一条 aw