对于经常处理文本内容的运维工程师或数据分析人员而言,awk 几乎是一项必备技能。在 awk 的众多操作中,比较运算符是最常用也最基础的一类——它们能帮助你快速过滤出符合特定数值或字符串条件的行。接下来我们直接切入正题,详细解析 awk 提供了哪些比较运算符,以及在实际工作场景中如何高效运用它们。
awk 比较运算符的基本概念
awk 中的比较运算符用于比较字符串和数值,基本覆盖了日常需求中的所有比较场景。具体整理如下:
符号 – 作用
> – 大于
< – 小于
>= – 大于等于
<= – 小于等于
== – 等于
!= – 不等于
some_value ~ /pattern/ – 如果 some_value 匹配模式 pattern,返回 true
some_value !~ /pattern/ – 如果 some_value 不匹配模式 pattern,返回 true
光看列表可能不够直观,我们直接结合具体数据,跑一遍示例就清楚了。
假设有一个文件 food_list.txt,记录了若干种食物的购买信息:
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
现在希望给那些数量小于或等于 30 的物品所在行的末尾加上 (**)。awk 中使用比较运算符的通用语法是:
# 表达式 { 动作; }
实际执行的命令如下:
awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt
输出结果:
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 **
这里有两个关键点:第一个表达式组合 $3 <= 30 { printf "%s\t%s\n", $0,"**" ; } 负责把数量小于等于 30 的行打印出来,并在末尾添加 **,其中 $3 代表每行的第三个字段(即数量)。第二个表达式组合 $3 > 30 { print $0 ;} 则原样输出数量大于 30 的行。
再换一个条件演示。这次我们想标记数量小于等于 20 的行,在末尾加上 TRUE:
awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20 { print $0 ;}' food_list.txt
输出结果:
No Item_Name Quantity Price 1 Mangoes 45 $3.45 2 Apples 25 $2.45 3 Pineapples 5 $4.45 TRUE 4 Tomatoes 25 $3.45 5 Onions 15 $1.45 TRUE 6 Bananas 30 $3.45
可以看到,第 3 行和第 5 行因为数量分别是 5 和 15,满足 ≤20 的条件,所以被标记为 TRUE;其他行则原样显示。
总结
以上就是 awk 比较运算符的基础用法,涵盖了日常工作中最常见的几种比较场景。当然,实际应用时还可以组合 &&、|| 等逻辑运算符,或者配合模式匹配实现更复杂的过滤与条件处理。建议你拿手边的数据文件多尝试几次,很快就能掌握 awk 条件过滤的规律,从而提升 Linux 文本处理效率。
