免费注册 查看新帖 |

Chinaunix

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

[文本处理] 区间连续的行合并问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-09-07 17:50 |只看该作者 |倒序浏览
本帖最后由 bxfqing 于 2016-09-07 18:00 编辑

原始待处理文本如下

  1. ===== 说明 =====
  2. ^ Option
  3. ^ Value
  4. ^ Default
  5. ^ Comment
  6. |-
  7. |TARGET_BUILD_TYPE
  8. |release、debug
  9. |release
  10. |默认rel
  11. |-
  12. |TARGET_BUILD_VARIANT
  13. |user、eng、userdebug
  14. |eng
  15. |版本类型
  16. |-

  17. ===== 其他 =====
  18. ^ Option
  19. ^ Value
  20. ^ Default
  21. ^ Comment
  22. |-
  23. |x1
  24. |x2
  25. |x3
  26. |x4
  27. |-
  28. |z1
  29. |z2
  30. |z3
  31. |z4
  32. |-
复制代码


期望的目标是转化成如下格式

连续的^被合并成一行
连续的|被合并成一行
  1. ^ Option ^ Valueb ^ Default ^ Comment ^
  2. |TARGET_BUILD_TYPE |release、debug |release |一般为release |
复制代码


我的思路

1. 首先处理标题,合并连续的行,把
^ Option
^ Value
^ Default
^ Comment
合并成,每个^前添加空格
^ Option ^ Valueb ^ Default ^ Comment
然后再在行尾添加^(这个知道怎么做)
^ Option ^ Valueb ^ Default ^ Comment ^

2. 然后处理内容
已|-作为分割,处理连续的行,把
|TARGET_BUILD_TYPE
|release、debug
|release
|默认rel
合并成,每个|添加空格
|TARGET_BUILD_TYPE |release、debug |release |一般为release |
最后在行尾追加|
最后去掉|-分隔符

当前现状:
目前还没有试出来如何合并连续的行和按照分隔符来合并连续行,求指教

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
2 [报告]
发表于 2016-09-07 18:39 |只看该作者
本帖最后由 moperyblue 于 2016-09-07 22:05 编辑

楼主 希望的结果是?
行数及关键字固定吗?

[code][/code]

论坛徽章:
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 [报告]
发表于 2016-09-07 18:48 |只看该作者
回复 1# bxfqing

$ awk '/^[\^]/{h=h"^ "$2" "}/^\|-/{if(h)print h"^";if(m)print m"|";h=m="";next}/^[|]/{m=m$1" "}' FILE
^ Option ^ Value ^ Default ^ Comment ^
|TARGET_BUILD_TYPE |release、debug |release |默认rel |
|TARGET_BUILD_VARIANT |user、eng、userdebug |eng |版本类型 |
^ Option ^ Value ^ Default ^ Comment ^
|x1 |x2 |x3 |x4 |
|z1 |z2 |z3 |z4 |

论坛徽章:
0
4 [报告]
发表于 2016-09-07 21:03 |只看该作者
回复 2# moperyblue

行数和关键字都不固定,仅仅是格式一致
^A
^B
^C
^D
|-
|F1
|F2
|F3
|-
^X
^Y
^Z
^A
|-
|X1
|X2
|X3
|-

|-
|X4
|X5
|X6
|-




论坛徽章:
0
5 [报告]
发表于 2016-09-07 21:14 |只看该作者
jason680 发表于 2016-09-07 18:48
回复 1# bxfqing

$ awk '/^[\^]/{h=h"^ "$2" "}/^\|-/{if(h)print h"^";if(m)print m"|";h=m="";next}/ ...

强,我要好好消化一下,
有办法保留不匹配的行吗?

比如#1的原生文本,转化出来,还保留着其他内容



===== 说明 =====
^ Option ^ Value ^ Default ^ Comment ^
|TARGET_BUILD_TYPE |release、debug |release |默认rel |
|TARGET_BUILD_VARIANT |user、eng、userdebug |eng |版本类型 |

===== 其他 =====

^ Option ^ Value ^ Default ^ Comment ^
|x1 |x2 |x3 |x4 |
|z1 |z2 |z3 |z4 |



目前想到的就只能后续拼接两个文件

论坛徽章:
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
6 [报告]
发表于 2016-09-07 22:04 |只看该作者
本帖最后由 jason680 于 2016-09-07 22:09 编辑

回复 5# bxfqing

$ awk '/^\^/{h=h"^ "$2" ";next}/^\|-/{if(h)print h"^";if(m)print m"|";h=m="";next}/^[|]/{m=m$1" ";next}1' FILE
===== 说明 =====
^ Option ^ Value ^ Default ^ Comment ^
|TARGET_BUILD_TYPE |release、debug |release |默认rel |
|TARGET_BUILD_VARIANT |user、eng、userdebug |eng |版本类型 |

===== 其他 =====
^ Option ^ Value ^ Default ^ Comment ^
|x1 |x2 |x3 |x4 |
|z1 |z2 |z3 |z4 |



awk初学之常见问题
http://bbs.chinaunix.net/thread-2309494-1-1.html



论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
7 [报告]
发表于 2016-09-07 22:04 |只看该作者
本帖最后由 moperyblue 于 2016-09-08 11:59 编辑

回复 4# bxfqing


  1. sed '/\^/{:a;N;/\n|-/!{s/\n/ /;ta};s/\n/ ^&/;tc};/|-/{:b;N;/\n$/{s/.*//;t};/\n|-/!{s/\n/ /;tb};s/|- //;s/\n/ |&/};:c;P;D' file
复制代码

===== 说明 =====
^ Option ^ Value ^ Default ^ Comment ^
|TARGET_BUILD_TYPE |release、debug |release |默认rel |
|TARGET_BUILD_VARIANT |user、eng、userdebug |eng |版本类型 |

===== 其他 =====
^ Option ^ Value ^ Default ^ Comment ^
|x1 |x2 |x3 |x4 |
|z1 |z2 |z3 |z4 |

论坛徽章:
36
摩羯座
日期:2013-09-23 16:37:312015年亚洲杯之沙特阿拉伯
日期:2015-04-14 09:10:172015亚冠之柏太阳神
日期:2015-06-25 08:48:212015亚冠之武里南联
日期:2015-07-28 09:01:082015亚冠之莱赫维亚
日期:2015-07-28 15:44:172015亚冠之柏斯波利斯
日期:2015-09-06 14:08:52白银圣斗士
日期:2015-11-25 17:06:2815-16赛季CBA联赛之吉林
日期:2015-12-09 16:59:072016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之辽宁
日期:2016-04-14 09:29:04luobin
日期:2016-06-17 17:46:3615-16赛季CBA联赛之天津
日期:2016-08-16 14:11:01
8 [报告]
发表于 2016-09-08 11:02 |只看该作者
  1. sed ':a;N;/|-/!s/\n/ /;ta;s/\(\^\||\)\([^\^|]*\)\n.*$/\1\2\1/;s/|-//'
复制代码

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

回复 1# bxfqing

  1. sed -r '/[\^|]/{:a;$!N;s/\n?\|\-//;/^([\^|]).+\n\1/!{P;D};s/\n//;ta};' file
复制代码
===== 说明 =====
^ Option^ Value^ Default^ Comment
|TARGET_BUILD_TYPE|release、debug|release|默认rel
|TARGET_BUILD_VARIANT|user、eng、userdebug|eng|版本类型

===== 其他 =====
^ Option^ Value^ Default^ Comment
|x1|x2|x3|x4
|z1|z2|z3|z4

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
10 [报告]
发表于 2016-09-08 12:12 |只看该作者

  1. sed '/\^/{:a;N;/|-/!{s/\n/ /;ta};s/\n.*/ ^/};/|/{:b;N;/|-/!{s/\n/ /;tb};s/\n.*/ |/}' file
复制代码

===== 说明 =====
^ Option ^ Value ^ Default ^ Comment ^
|TARGET_BUILD_TYPE |release、debug |release |默认rel |
|TARGET_BUILD_VARIANT |user、eng、userdebug |eng |版本类型 |

===== 其他 =====
^ Option ^ Value ^ Default ^ Comment ^
|x1 |x2 |x3 |x4 |
|z1 |z2 |z3 |z4 |
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP