当前位置: 首页 > news >正文

awk 系列:如何使用 awk 的 ‘next’ 命令

在 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中国”

相关文章:

  • 《深入浅出iPhone/iPad开发(第2版)》——你已经创建了自己的第一个iPhone应用程序!...
  • 十分钟搞清字符集和字符编码
  • 缓存失效竟然可以这么解决?
  • 一个最简单的jQuery插件编写历程
  • 《Android游戏开发详解》一2.10 使用对象
  • 《Python核心编程(第3版)》——2.8 练习
  • 《编译与反编译技术实战 》一 第1章 实践的环境与工具
  • Hadoop创始人Doug Cutting谈未来大数据的技术
  • 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.16 创建索引...
  • 《嵌入式C编程:PIC单片机和C编程技术与应用》一1.11 兼容性
  • 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——2.5节点对点通信
  • 《走进SAP(第2版)》——1.2 小结
  • 《HTML5实战》——第2章 创建表单:输入小部件、数据绑定以及数据验证
  • 《Nmap渗透测试指南》—第7章7.9节系统漏洞扫描
  • Firefox OS 模拟器
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • eclipse(luna)创建web工程
  • es的写入过程
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java-详解HashMap
  • Laravel 实践之路: 数据库迁移与数据填充
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 区块链共识机制优缺点对比都是什么
  • 双管齐下,VMware的容器新战略
  • 一个项目push到多个远程Git仓库
  • # Maven错误Error executing Maven
  • #if #elif #endif
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (5)STL算法之复制
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (ibm)Java 语言的 XPath API
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (NSDate) 时间 (time )比较
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (推荐)叮当——中文语音对话机器人
  • (转)母版页和相对路径
  • .apk文件,IIS不支持下载解决
  • .NET 4.0中的泛型协变和反变
  • .NET 5种线程安全集合
  • .Net各种迷惑命名解释
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • /etc/sudoers (root权限管理)
  • ??在JSP中,java和JavaScript如何交互?
  • @WebService和@WebMethod注解的用法
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [AIGC] SQL中的数据添加和操作:数据类型介绍