免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ghostgorst
打印 上一主题 下一主题

awk的next使用 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-08-21 11:46 |只看该作者
man里的解释:
       next                  Stop processing the current input record.  The next input record is read and processing starts over
                             with the first pattern in the AWK program.  If the end of  the  input  data  is  reached,  the  END
                             block(s), if any, are executed.

意思就是:停止处理当前输入记录,下一个记录读入然后从第一个模式匹配。


也就是想当于 C 中的 continue的意思一样。

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

论坛徽章:
0
12 [报告]
发表于 2009-08-21 11:47 |只看该作者
awk '{if ($0 ~ /a/)next;else print}' test
b
c
d
e
f

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

回复 #9 blackold 的帖子

呵呵,黑哥这个说法很形象啊!

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

回复 #9 blackold 的帖子

我理解成直接把交了学费的人拉过来办理入学手续了

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

回复 #10 wwmstone 的帖子

看来我的手册比较土

awk(1)                                                               awk(1)

           if(expression) statement [ else statement ]
           while(expression) statement
           for(expression;expression;expression) statement
           for(var in array) statement
           do statement while(expression)
           break
           continue
           {[statement  ...]}
           expression          # commonly  var = expression
           print [expression-list] [ > expression]
           printf format [, expression-list] [ > expression]
           return [expression]
          next                # skip remaining patterns on this input line.           delete array [expression]   # delete an array element.
           exit [expression]   # exit immediately; status is expression.



只有这一行解释啊

论坛徽章:
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
16 [报告]
发表于 2009-08-21 11:50 |只看该作者

回复 #13 ghostgorst 的帖子

没有错啊,排在你后面的下一个同学过来办理手续(手续从头开始办理,不是接着你的办理步骤)。

论坛徽章:
0
17 [报告]
发表于 2009-08-21 11:52 |只看该作者
黑哥说得形象,就是这个理解的。。

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

回复 #15 blackold 的帖子

我后面的也没交费,后面的后面那个交费了,

我原来理解成直接取后面的后面那个人了,

本来我是想处理当前模式的时候,当然只读满足当前模式的数据了.

论坛徽章:
0
19 [报告]
发表于 2009-08-21 12:32 |只看该作者
[root@test ~]# more test
1  a
2  b
3  c
4  d
5  e
6  f
7  g
8  h
9  i
10 j
[root@test ~]# awk '{if ($1 >= 5) next;print $2}' test
a
b
c
d
[root@test ~]#


next停止对当前输入记录的处理,从下一个输入记录继续。

[ 本帖最后由 小木虫子 于 2009-8-21 14:54 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2009-08-21 14:09 |只看该作者

回复 #19 kwokcn 的帖子

awk '/^a/{print $0} /^a/{print $0}' 那这样不加next语句,awk怎么处理呢?
1.读入一行,从第一个模式开始匹配一直到最后一个模式,所有模式都匹配一边么?
2.还是处理一个模式时候,把所有匹配行都读入处理,然后再处理下一个模式?

按照大家回帖我理解多数都是第1种情况,但想不出来例子证明这点.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP