博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk 系列:如何使用 awk 的 ‘next’ 命令
阅读量:5925 次
发布时间:2019-06-19

本文共 1351 字,大约阅读时间需要 4 分钟。

在 awk 系列的第六节,我们来看一下next命令 ,它告诉 awk 跳过你所提供的所有剩下的模式和表达式,直接处理下一个输入行。

next 命令帮助你阻止运行命令执行过程中多余的步骤。

要明白它是如何工作的, 让我们来分析一下 food_list.txt 它看起来像这样:

 
  1. Food List Items
  2. No Item_Name Price Quantity
  3. 1 Mangoes $3.45 5
  4. 2 Apples $2.45 25
  5. 3 Pineapples $4.45 55
  6. 4 Tomatoes $3.45 25
  7. 5 Onions $1.45 15
  8. 6 Bananas $3.45 30

运行下面的命令,它将在每个食物数量小于或者等于 20 的行后面标一个星号:

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

上面的命令实际运行如下:

  • 首先,它用$4 <= 20表达式检查每个输入行的第四列(数量(Quantity))是否小于或者等于 20,如果满足条件,它将在末尾打一个星号 (*)
  • 接着,它用$4 > 20表达式检查每个输入行的第四列是否大于20,如果满足条件,显示出来。

但是这里有一个问题, 当第一个表达式用{ printf "%s\t%s\n", $0,"**" ; }命令进行标注的时候在同样的步骤第二个表达式也进行了判断这样就浪费了时间.

因此当我们已经用第一个表达式打印标志行的时候就不再需要用第二个表达式$4 > 20再次打印。

要处理这个问题, 我们需要用到next 命令:

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

当输入行用$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next ; }命令打印以后,next命令将跳过第二个$4 > 20 { print $0 ;}表达式,继续判断下一个输入行,而不是浪费时间继续判断一下是不是当前输入行还大于 20。

next命令在编写高效的命令脚本时候是非常重要的,它可以提高脚本速度。本系列的下一部分我们将来学习如何使用 awk 来处理标准输入(STDIN)。

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

本文来自云栖社区合作伙伴“Linux中国”

转载地址:http://blovx.baihongyu.com/

你可能感兴趣的文章
linux包之sysstat之mpstat与pidstat命令
查看>>
如何查找业务用例和业务执行者
查看>>
Exchange2003-2010迁移系列之九,创建DAG组
查看>>
欢迎与我一起交流安全管理平台
查看>>
让未备案的网站先飙起来
查看>>
Vue CLI 3开发中屏蔽烦人的EsLint错误
查看>>
Office 365离线安装
查看>>
中小企业虚拟化解决方案-VMware vSphere 6.5-日常管理入口v0.0.1
查看>>
iOS-获取当前时间的年、月、日、时、分、秒
查看>>
PhotoShop CS5制作残旧的印章效果
查看>>
Redis主从持久化测试
查看>>
优秀的培训机构该如何培养学生?
查看>>
iPhone比小米贵3000,贵在哪里?
查看>>
十年老站吐血迁移实录
查看>>
HTTP头信息
查看>>
负载均衡环境搭建实战之nginx和tomcat
查看>>
aws-ec2-双网卡问题
查看>>
装饰一个类及内部方法
查看>>
实施Exchange 2013中的 MailTip
查看>>
Windows Server 2016-图形化迁移FSMO角色
查看>>