Linux中国
awk 系列:如何使用 awk 的 ‘next’ 命令
在 awk 系列的第六节,我们来看一下next
命令 ,它告诉 awk 跳过你所提供的所有剩下的模式和表达式,直接处理下一个输入行。
next
命令帮助你阻止运行命令执行过程中多余的步骤。
要明白它是如何工作的, 让我们来分析一下 food_list.txt 它看起来像这样:
Food List Items
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 "%st%sn", $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
上面的命令实际运行如下:
- 首先,它用
$4 <= 20
表达式检查每个输入行的第四列(数量(Quantity))是否小于或者等于 20,如果满足条件,它将在末尾打一个星号(*)
。 - 接着,它用
$4 > 20
表达式检查每个输入行的第四列是否大于20,如果满足条件,显示出来。
但是这里有一个问题, 当第一个表达式用{ printf "%st%sn", $0,"**" ; }
命令进行标注的时候在同样的步骤第二个表达式也进行了判断这样就浪费了时间.
因此当我们已经用第一个表达式打印标志行的时候就不再需要用第二个表达式$4 > 20
再次打印。
要处理这个问题, 我们需要用到next
命令:
# awk '$4 <= 20 { printf "%st%sn", $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 "%st%sn", $0,"*" ; next ; }
命令打印以后,next
命令将跳过第二个$4 > 20
{ print $0 ;}
表达式,继续判断下一个输入行,而不是浪费时间继续判断一下是不是当前输入行还大于 20。
next
命令在编写高效的命令脚本时候是非常重要的,它可以提高脚本速度。本系列的下一部分我们将来学习如何使用 awk 来处理标准输入(STDIN)。
希望这篇文章对你有帮助,你可以给我们留言。
via: http://www.tecmint.com/use-next-command-with-awk-in-linux/
作者:Aaron Kili 译者:kokialoves 校对:wxy
本文转载来自 Linux 中国: https://github.com/Linux-CN/archive
对这篇文章感觉如何?
太棒了
0
不错
0
爱死了
0
不太好
0
感觉很糟
0
More in:Linux中国
如何通过 VLC 使用字幕
使用 VLC 媒体播放器播放和管理字幕的新手指南。
Unix 桌面:在 Linux 问世之前
仅仅开源还不足以实现开放,还需开放标准和建立共识。
Valve 对于 Ubuntu 的 Snap 版本的 Steam 并不满意:原因何在
你可能会发现,Snap 版本的 Steam 并不如你期待的那样好,你怎么看?
Wine 9.0 发布,实验性地加入了 Wayland 驱动
Wine 的这个新版本正在为未来做好准备!