免费注册 查看新帖 |

Chinaunix

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

[文本处理] 关于awk的范围模式功能问题【已解决】 [复制链接]

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-08-15 23:47 |只看该作者 |倒序浏览
本帖最后由 irockey 于 2017-08-16 21:54 编辑

关于awk的范围模式功能问题

man awk中这样写到

The  pattern1,  pattern2 form of an expression is called a range pattern.  It matches all input records starting with a record that matches pattern1, and continuing until a record that matches pattern2, inclusive.  It does not combine with any other sort of pattern expression.

表达式的pattern1,pattern2形式称为范围模式。 它匹配所有输入记录,从与pattern1匹配的记录开始,并持续到与pattern2匹配的记录(包括)。 它不与任何其他类型的模式表达式组合。

[root@localhost ~]# awk '/aaa/,/bbb/{print}' file
aaa
  grge
  ddd
bbb
aaa gege
ccc
bbb
aaa gregeg
  eee
bbb
这里的/bbb/并没有起作用,执行了从/aaa/一直匹配到最后一行

[root@localhost ~]# awk '/aaa/,/ccc/{print}' file
aaa
  grge
  ddd
bbb

aaa gege
ccc
aaa gregeg
  eee
bbb
这里/ccc/并没有起作用,跟/bbb/一样,","起作用了,但/bbb/没有匹配到结果


按照awk的man文档说明,awk '/aaa/,/bbb/' file结果应该是
aaa
  grge
  ddd
bbb

可是这里的结果却是到最后一行,是不是/bbb/这个pattern并没有匹配到
[root@localhost ~]# seq 9 | awk /3/,/7/
3
4
5
6
7
当每行内容不同,awk的范围模式能正确执行
[root@localhost ~]# seq 10 | awk /1/,/7/
1
2
3
4
5
6
7
10
当有重复行时,范围模式会将重复结果显示

想问下,awk的pattern,pattern模式正确的使用方式应该是怎样的
什么时候用awk的范围模式?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2017-08-16 08:27 |只看该作者

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2017-08-16 21:51 |只看该作者
回复 1# irockey



# awk '/aaa/,/bbb/{print}' file
aaa
  grge
  ddd
bbb
aaa gege
ccc
bbb
aaa gregeg
  eee
bbb


[root@localhost ~]# awk '/aaa/,/ccc/{print}' file
aaa
  grge
  ddd
bbb

aaa gege
ccc
aaa gregeg
  eee
bbb

$ seq 20 | awk '/3/,/7/{print}'
3
4
5
6
7
13
14
15
16
17

$ seq 15 | awk '/3/,/7/{print}'
3
4
5
6
7
13
14
15

$ seq 15 | awk '/1/,/2/{print}'
1
2
10
11
12
13
14
15

$ seq 23 | awk '/1/,/2/{print}'
1
2
10
11
12
13
14
15
16
17
18
19
20
21


论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
4 [报告]
发表于 2017-08-16 21:51 |只看该作者
回复 2# yinyuemi

谢谢s博

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
5 [报告]
发表于 2017-08-16 21:54 |只看该作者
回复 3# jason680

恍然大悟,谢谢!

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
6 [报告]
发表于 2017-08-18 15:56 |只看该作者
回复 3# jason680

$ seq 23 | awk '/1/,/2/{print}'
1
2
10
11
12
13
14
15
16
17
18
19
20
21                        #这里的匹配很奇怪
最后一行的结果,范围匹配不是应该先匹配1,再匹配2;难道说在同一行内没有先后顺序这个说法?

1
2
10
11
12
13
14
15
16
17
18
19
20
21
22


其实按照我的想法应该是这个结果,但程序跑出来却不是;想确认下,awk的范围模式在同一行内是不是不分先后
查看英文文档好友压力,所以后者脸皮来问了

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
7 [报告]
发表于 2017-08-18 15:57 |只看该作者
本帖最后由 irockey 于 2017-08-18 15:58 编辑


1

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2017-08-22 00:33 |只看该作者
回复 6# irockey

自己实现一下,就知道了...

awk '/1/,/2/{print}' FILE

awk '/1/{p=1}p{print}/2/{p=0}' FILE

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
9 [报告]
发表于 2017-08-22 09:01 |只看该作者
回复 8# jason680

谢谢,思维有点僵化,习惯了提问,多谢提醒!

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
10 [报告]
发表于 2017-08-22 09:02 |只看该作者
楼上的字符颜色为无色,我复制粘贴了一下

awk '/1/,/2/{print}' FILE

awk '/1/{p=1}p{print}/2/{p=0}' FILE
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP