免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 30403 | 回复: 42
打印 上一主题 下一主题

awk的next使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-21 11:11 |只看该作者 |倒序浏览
5可用积分
man awk next只能读懂字面上含义,

谁能给几个例子说明下具体含义和使用方法呢?自己写的几个例子都达不到预期效果,可能是理解的不对.

telfort1:/kfbuild/x144378>cat file
a
a
b
c
d
e
f

telfort1:/kfbuild/x144378>awk '/^a/{print $0} /^a/{print $0}' file
a
a
a
a

telfort1:/kfbuild/x144378>awk '/^a/{print $0;next} /^a/{print $0}' file
a
a
#1.按我的理解也应该输出4个a,谁能帮忙解释解释呢?我是理解成读入下一行匹配的模式

这2个输出结果一样啊
awk '/^a/{print $0;next}' file file
awk '/^a/{print $0}' file file
这2个输出结果也一样啊
awk '/^a/{print $0;next}' file
awk '/^a/{print $0}' file
#2.next有什么作用呢?


awk '/^a/{next;print $0}' file这个什么也输出不来
#3.awk的模式和动作具体怎么运行的呢?模式先匹配所有行,动作再一个个执行么?还是匹配一行,动作处理一行呢

问的应该比较白痴,大家给点拨下啊.

[ 本帖最后由 ghostgorst 于 2009-8-21 11:12 编辑 ]

最佳答案

查看完整内容

这样理解awk的next:遇到next时,读入下一行,然后从头开始处理,即next起到了{getline; goto head}的作用。awk '/^a/{print $0;next} /^a/{print $0}' 用伪码可以这样来看:

论坛徽章:
0
2 [报告]
发表于 2009-08-21 11:11 |只看该作者
这样理解awk的next:
遇到next时,读入下一行,然后从头开始处理,即next起到了{getline; goto head}的作用。

awk '/^a/{print $0;next} /^a/{print $0}' 用伪码可以这样来看:

  1. :head
  2. if 匹配/^a/
  3.     print $0
  4.     读入下一行
  5.     goto head
  6. fi
  7. if 匹配/^a/
  8.     print $0
  9. fi
  10. goto head
复制代码

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2009-08-21 11:17 |只看该作者

回复 #1 ghostgorst 的帖子

next  可以简单理解为跳过后面的代码,如果next被执行,那么它后面的代码就都不会被执行了。

论坛徽章:
0
4 [报告]
发表于 2009-08-21 11:19 |只看该作者

回复 #2 ly5066113 的帖子

这个应该是一种功能吧,感觉用来理解
awk '/^a/{next;print $0}' file这个挺合适

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2009-08-21 11:19 |只看该作者

回复 #1 ghostgorst 的帖子

awk code: 'BEGIN{...}{Main Input}END{..}'
next 读入下一输入行并从(Main Input中的)第一个规则开始执行脚本。
有这么难理解吗?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2009-08-21 11:20 |只看该作者

回复 #3 ghostgorst 的帖子

awk '/^a/{next;print $0}
既然next了,print $0不是多余的吗?

论坛徽章:
0
7 [报告]
发表于 2009-08-21 11:26 |只看该作者

回复 #5 blackold 的帖子

不知道next功能,才这么写了,初学实验而已.

awk code: 'BEGIN{...}{Main Input}END{..}'
next 读入下一输入行并从(Main Input中的)第一个规则开始执行脚本。

不过有这一句解释就好理解多了.

[ 本帖最后由 ghostgorst 于 2009-8-21 11:27 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2009-08-21 11:29 |只看该作者

回复 #6 ghostgorst 的帖子

手册里面不是有这句话吗?

一般称为next 语句、命令,或者是函数,很少见人把它称为next功能。

论坛徽章:
0
9 [报告]
发表于 2009-08-21 11:33 |只看该作者

回复 #7 blackold 的帖子

不知道next语句的功能

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
10 [报告]
发表于 2009-08-21 11:42 |只看该作者
理解这点有这么难吗?我想不通。

生活经常碰到这类事情,比如,你正在排队办理入学手续,人家看你还没交费,就next,下一个过来办,你先到财务交费之后再过来……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP