免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教一个关于按关键字分段的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-23 16:14 |只看该作者 |倒序浏览
有一个文件,有许多段落组成,每个段落首行含有字段PROCESS INDEX,
我现在的解决办法是使用如下语句,
  1. awk -vRS="PROCESS INDEX" '{print > ++i;close(i)}' urfile
复制代码
不过有个问题是,参数-v并不是在所有的平台都支持的,比如Mac上就不支持,求教有什么其他的替代方案没?
谢谢了

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2013-02-23 16:41 |只看该作者
本帖最后由 yinyuemi 于 2013-02-23 16:41 编辑

如果不介意保留关键字的话,try :

awk '/^PROCESS INDEX/{i++}{print > i}' file

论坛徽章:
0
3 [报告]
发表于 2013-02-23 20:50 |只看该作者
回复 2# yinyuemi

谢谢,不过似乎不行,关键字PROCESS INDEX不是行首,我改成awk '/PROCESS OBJECT/ {i++} {print > i}' urfile后还是报错

awk: null file name in print or getline

论坛徽章:
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 [报告]
发表于 2013-02-23 21:01 |只看该作者
回复 1# diwcrystal
  1. BEGIN{RS="xxx"}....
复制代码
如何?

也可以考虑 csplit 命令。


论坛徽章:
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 [报告]
发表于 2013-02-23 21:12 |只看该作者
回复 3# diwcrystal


    try: print > i+0

论坛徽章:
0
6 [报告]
发表于 2013-02-23 21:17 |只看该作者
回复 2# yinyuemi




awk 'BEGIN{RS="PROCESS INDEX"}{print > ++i;close(i)}' file

awk 'BEGIN{RS="PROCESS INDEX"}{i++}{print > i;close(i)}' file

作用相同,不过原语句分割出60多个的话,它会分成近2000

csplit没研究过,我查查去

论坛徽章:
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
7 [报告]
发表于 2013-02-23 21:21 |只看该作者
回复 6# diwcrystal


    同样的平台,同样的文件,结果不同?

论坛徽章:
0
8 [报告]
发表于 2013-02-23 21:26 |只看该作者
回复 7# blackold


原语句在linux下可以正常执行,但Mac不支持,另两个语句的执行结果一致,但跟原语句的执行结果不同,它们把每个段落又都打散了

论坛徽章:
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
9 [报告]
发表于 2013-02-23 21:38 |只看该作者
回复 8# diwcrystal
  1. awk -vRS="PROCESS INDEX" '{print > ++i;close(i)}' urfile
复制代码
  1. awk 'BEGIN{RS="PROCESS INDEX"}{print > ++i;close(i)}' urfile
复制代码
输出不同?

论坛徽章:
0
10 [报告]
发表于 2013-02-23 21:39 |只看该作者
真受不了Mac平台了,shell好多不通用,
  1. csplit file '/PROCESS INDEX/' {*}
复制代码
在Linux下可以成功分割,Mac下居然又报错
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP