免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk中next和getline的区别 [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 10:01:44程序设计版块每日发帖之星
日期:2015-06-28 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-11 11:12 |只看该作者 |倒序浏览
都是读取下一行,不知道有啥区别

论坛徽章:
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
2 [报告]
发表于 2015-06-11 11:39 |只看该作者
回复 1# maple412


    next (从输入流中)读取下一行
getline 获取一行,从哪里获取?你可以指定。

论坛徽章:
0
3 [报告]
发表于 2015-06-11 11:40 |只看该作者
本帖最后由 liuyu85 于 2015-06-11 11:43 编辑

回复 1# maple412
  1. #echo "1 2
  2. 3 4"|awk '{print $1;next;print $2}'
  3. 1
  4. 3
  5. #echo "1 2
  6. 3 4"|awk '{print $1;getline;print $2}'
  7. 1
  8. 4
复制代码
从上面看出,next只是完成当前记录的处理,继续处理下一条记录(上面的代码里print $2根本执行不到)。getline是读取下一条记录以后继续执行后面的print $2

论坛徽章:
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
4 [报告]
发表于 2015-06-11 11:47 |只看该作者
回复 3# liuyu85


    嗯,对,next同时还改变了控制流,使控制跳到第一个 rule。

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
5 [报告]
发表于 2015-06-11 13:12 |只看该作者
你的理解都是读取下一行.

我的理解:

next: 跳过后面的代码, 进入下一个处理流程,相当于 for 循环中的 continue, (本质上可以理解为awk就是一个输入流 的 for循环)

getline: 直接从当前行的位置读取输入流的下一行

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
6 [报告]
发表于 2015-06-11 13:20 |只看该作者
这是手册上的说法:
Next Statement:                  Stop processing the current input record.
Getline:                  Reading files under explicit program control using the getline function.

next 并没有说是读取下一行的功能,它只是流程控制,控制停止当前行的处理,进入下一行的处理(当然,下一行的处理总是先读取该行)。
getline 相当于改变当前执行过程中的 $0 的功能。

论坛徽章:
9
寅虎
日期:2013-12-02 12:49:22巨蟹座
日期:2014-07-18 18:13:34卯兔
日期:2014-07-25 14:43:08子鼠
日期:2014-07-26 10:10:51酉鸡
日期:2014-07-31 15:09:562015亚冠之本尤德科
日期:2015-05-19 09:27:382015亚冠之卡尔希纳萨夫
日期:2015-06-20 10:30:212015亚冠之阿尔纳斯尔
日期:2015-07-01 20:46:062015亚冠之城南
日期:2015-07-15 21:12:00
7 [报告]
发表于 2015-06-11 13:59 |只看该作者
  1. getline               Set $0 from next input record; set NF, NR, FNR.
  2. next                  Stop  processing the current input record.  The next input record is read and process‐
  3.                              ing starts over with the first pattern in the AWK program.  If the end  of  the  input
  4.                              data is reached, the END block(s), if any, are executed.
复制代码
有些中文文档真是害死人啊

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
8 [报告]
发表于 2015-09-07 10:16 |只看该作者
学习~!!

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
9 [报告]
发表于 2015-09-07 10:23 |只看该作者
mark

论坛徽章:
0
10 [报告]
发表于 2016-07-14 17:38 |只看该作者
学习了,非常不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP