在处理一行文本中的数字或字符串值时,使用比较运算符过滤文本或字符串对于awk命令用户来说非常方便。在Awk系列教程中,本文将简单介绍如何使用比较运算符过滤文本或字符串。
如果你是一名程序员,或许已经非常熟悉比较运算符,但对于Linux新手用户可能还不太了解,所以接下来小编将进行简单解释。
Awk中的比较运算符是什么?
在深入了解如何在Awk中使用比较运算符之前,让我们首先了解什么是比较运算符。
比较运算符由编程语言中用于比较值的符号或关键字组成。在awk中,比较运算符经常用于比较数字或字符串的值,它们包括以下内容:
>
:大于<
:少于>=
:大于或等于<=
:小于或等于==
:等于!=
:不等于some_value ~ / pattern/
:如果some_value与模式匹配则为truesome_value !~ / pattern/
:如果some_value与模式不匹配则为true
上面已经介绍了Awk中的各种比较运算符,接下来通过一些示例来更好的理解它们。
使用awk过滤数据
在此示例中,有一个名为food_list.txt的文件(内容如下),它是不同食品的购物清单,这里想通过在每行末尾添加(**)
来标记数量小于或等于20的食品。
No Item_Name Quantity Price 1 Mangoes 45 $3.45 2 Apples 25 $2.45 3 Pineapples 5 $4.45 4 Tomatoes 25 $3.45 5 Onions 15 $1.45 6 Bananas 30 $3.45
在Awk中使用比较运算符的一般语法是:
expression { actions; }
为了实现上述目标,这里必须运行以下命令:
awk '$3 <= 20 {print $0 " (**)" } $3 > 20 {print $0}' food_list.txt
以下是该命令的解释:
- awk:此命令调用Awk文本处理实用程序。
- ‘$3 <= 20 {print $0 ” (**)” }: 命令的一个条件,后面跟操作,它检查每行第三列中的值(数量)是否小于或等于20。如果条件为真,则打印整行($0)并在其后附加“(**)” 。
- $3 > 20 {print $0} :命令的另一个条件,后面跟着一个操作,它检查每行第三列中的值(数量)是否大于20。如果条件为真,它会打印整行($0),不做任何修改。
- food_list.txt:这是Awk命令将处理的输入文件,它包含将应用命令中指定的条件和操作的数据。
另一个示例是在数量小于或等于20的行末尾标记单词“( TRUE )”,命令如下:
awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20 { print $0 ;} ' food_list.txt
在Awk中组合运算符
实际上,我们还可以组合多个比较运算符来创建更复杂的条件。例如,如果要过滤掉数量在20到50之间的食品,可以使用逻辑与运算符(&&),如下所示:
awk '$3 >= 20 && $3 <= 50' food_list.txt
如上图所示,AWK命令将打印数量(第三列)介于20至50之间的行。
以上仅演示几个实例,Awk使用比较运算符和数据过滤的更多用法可以参考上述教程进行设置,也可以查看Awk命令帮助页面或查阅相关资料进行了解。