如何在 Linux 中通过 Awk 使用“next”命令 - 第 6 部分
在 Awk 系列的第六部分中,我们将了解如何使用 next
命令,该命令告诉 Awk 跳过您提供的所有剩余模式和表达式,而是阅读下一个输入线。
next
命令可以帮助您避免执行我所说的命令执行中浪费时间的步骤。
为了理解它是如何工作的,让我们考虑一个名为 food_list.txt 的文件,如下所示:
No Item_Name Price Quantity
1 Mangoes $3.45 5
2 Apples $2.45 25
3 Pineapples $4.45 55
4 Tomatoes $3.45 25
5 Onions $1.45 15
6 Bananas $3.45 30
考虑运行以下命令,该命令将在每行末尾使用 (*)
符号标记数量小于或等于 20 的食品:
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt
No Item_Name Price Quantity
1 Mangoes $3.45 5 *
2 Apples $2.45 25
3 Pineapples $4.45 55
4 Tomatoes $3.45 25
5 Onions $1.45 15 *
6 Bananas $3.45 30
上面的命令实际上的工作原理如下:
- 首先,它检查每个输入行的第四个字段的数量是否小于或等于20,如果值满足该条件,则打印该值并用
(*)
标记 使用表达式一在末尾签名:$4 <= 20
- 其次,它检查每个输入行的第四个字段是否大于 20,如果一行满足条件,则使用表达式二打印:
$4 > 20
但这里有一个问题,当执行第一个表达式时,我们想要标记的行被打印出来: { printf "%s\t%s\n", $0, “**”; }
然后在同一步骤中,还检查第二个表达式,这成为浪费时间的因素。
因此,在打印使用第一个表达式打印的已标记行后,无需再次执行第二个表达式 $4 > 20
。
要解决这个问题,您必须使用 next
命令,如下所示:
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;} ' food_list.txt
No Item_Name Price Quantity
1 Mangoes $3.45 5 *
2 Apples $2.45 25
3 Pineapples $4.45 55
4 Tomatoes $3.45 25
5 Onions $1.45 15 *
6 Bananas $3.45 30
使用 $4 <= 20
打印单个输入行后 { printf "%s\t%s\n", $0,"*" ;下一个 ; }
,包含的 next
命令将帮助跳过第二个表达式 $4 > 20
{ print $0 ;}
,因此执行到下一个输入行,而不必浪费时间检查数量是否大于20。
next 命令对于编写高效的命令非常重要,并且在必要时,您始终可以使用它来加快脚本的执行速度。为本系列的下一部分做好准备,我们将研究使用标准输入 (STDIN) 作为 Awk 的输入。
希望本指南对您有所帮助,并且您可以一如既往地在下面的评论部分留下评论,以书面形式表达您的想法。