免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教:用sed合并行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-24 09:34 |只看该作者 |倒序浏览
本帖最后由 rdcwayx 于 2013-10-24 13:54 编辑

我有一个文件,如下:
  1. H,-2.8371156948,-4.0601065366,-2
  2.   .2585345957
  3. H,-1.9273890496,-2.5326394703,-2.3401898981
  4. C,-5.286363018
  5.   8,0.1225866264,3.1396928137
  6. H,-6.2484951813,0.4281142252,3.5680878194
  7. H,-4.9775366322,-0.8263486379,3.5896831048
  8. H,-4.5236192769,0.874319083
  9.   ,3.3527292564
  10. C,-6.8736417661,-1.2229375694,1.2080735398
  11. H,-7.13948595
  12.   19,-1.4395360335,0.1689799143
  13. H,-6.6556094944,-2.1661733149,1.71741620
  14.   77
复制代码
请问,如何用sed命令,将前面为空格的行与上一行合并?
谢谢。

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
2 [报告]
发表于 2013-10-24 09:59 |只看该作者
没发现前面为空格的行。猜一猜结果吧
  1. sed ':a;N;s/\n\(^[^A-Z]\)/\1/;ta;P;D' file
  2. H,-2.8371156948,-4.0601065366,-2.2585345957
  3. H,-1.9273890496,-2.5326394703,-2.3401898981
  4. C,-5.2863630188,0.1225866264,3.1396928137
  5. H,-6.2484951813,0.4281142252,3.5680878194
  6. H,-4.9775366322,-0.8263486379,3.5896831048
  7. H,-4.5236192769,0.874319083,3.3527292564
  8. C,-6.8736417661,-1.2229375694,1.2080735398
  9. H,-7.1394859519,-1.4395360335,0.1689799143
  10. H,-6.6556094944,-2.1661733149,1.7174162077
复制代码

论坛徽章:
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
3 [报告]
发表于 2013-10-24 10:01 |只看该作者
  1. awk '!/^[A-Z]/{print s""$0;s="";next}{s=s?s"\n"$0:$0}'
复制代码
sed 的暂时没想到,先上个awk的。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
4 [报告]
发表于 2013-10-24 10:40 |只看该作者
  1. [root@localhost ~]# cat i
  2. H,-2.8371156948,-4.0601065366,-2
  3. .2585345957
  4. H,-1.9273890496,-2.5326394703,-2.3401898981
  5. C,-5.286363018
  6. 8,0.1225866264,3.1396928137
  7. H,-6.2484951813,0.4281142252,3.5680878194
  8. H,-4.9775366322,-0.8263486379,3.5896831048
  9. H,-4.5236192769,0.874319083
  10. ,3.3527292564
  11. C,-6.8736417661,-1.2229375694,1.2080735398
  12. H,-7.13948595
  13. 19,-1.4395360335,0.1689799143
  14. H,-6.6556094944,-2.1661733149,1.71741620
  15. 77
  16. [root@localhost ~]# sed 'N;/\n[^A-Z]/s/\n//;P;D' i
  17. H,-2.8371156948,-4.0601065366,-2.2585345957
  18. H,-1.9273890496,-2.5326394703,-2.3401898981
  19. C,-5.2863630188,0.1225866264,3.1396928137
  20. H,-6.2484951813,0.4281142252,3.5680878194
  21. H,-4.9775366322,-0.8263486379,3.5896831048
  22. H,-4.5236192769,0.874319083,3.3527292564
  23. C,-6.8736417661,-1.2229375694,1.2080735398
  24. H,-7.1394859519,-1.4395360335,0.1689799143
  25. H,-6.6556094944,-2.1661733149,1.7174162077
  26. [root@localhost ~]#
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
5 [报告]
发表于 2013-10-24 10:41 |只看该作者
本帖最后由 关阴月飞 于 2013-10-24 10:44 编辑

回复 1# acco98

目测一下 合并前面为空格的行:
  1. awk -vRS='' '{gsub(/$\n /," ")}1' urfile   
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-10-24 11:50 |只看该作者
谢谢大家的帮助,2,3,4,5楼的方法我都试了,都可以,谢谢大家
实际上我有这样一个文件:
1\1\GINC-NUME9\Freq\RB3LYP\6-31G(d)\C4H2N2\WANG\13-May-2013\0\\#N Geo
m=AllCheck Guess=TCheck SCRF=Check GenChk RB3LYP/6-31G(d) Freq\\Title
Card Required\\0,1\C,-2.6366683128,0.3811261006,0.\H,-2.1080066854,-0.
5656603783,0.\H,-3.7209494923,0.3661546899,0.\C,-1.9629960799,1.547172
3156,0.\C,-0.5247033184,1.5866019599,0.\C,-2.6471313427,2.8129366249,0
.\N,0.6369191261,1.616062051,0.\N,-3.2016942646,3.8340611864,0.\\Versi
on=
想通过shell编程实现:(1)将"\"替换成回车换行符 (2)将"#N"到"Versi"之间的内容保存。我写了一个shell,都不太满意,不能完全达到这个目的,还请大家帮忙。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2013-10-24 11:58 |只看该作者
  1. tr "\\" "\n"  yourfile |sed -n '/#N/,/Versi/p'
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
8 [报告]
发表于 2013-10-24 12:15 |只看该作者
本帖最后由 yestreenstars 于 2013-10-24 12:17 编辑

回复 6# acco98
  1. [root@localhost ~]# cat i
  2. 1\1\GINC-NUME9\Freq\RB3LYP\6-31G(d)\C4H2N2\WANG\13-May-2013\0\\#N Geo
  3. m=AllCheck Guess=TCheck SCRF=Check GenChk RB3LYP/6-31G(d) Freq\\Title
  4. Card Required\\0,1\C,-2.6366683128,0.3811261006,0.\H,-2.1080066854,-0.
  5. 5656603783,0.\H,-3.7209494923,0.3661546899,0.\C,-1.9629960799,1.547172
  6. 3156,0.\C,-0.5247033184,1.5866019599,0.\C,-2.6471313427,2.8129366249,0
  7. .\N,0.6369191261,1.616062051,0.\N,-3.2016942646,3.8340611864,0.\\Versi
  8. on=
  9. [root@localhost ~]# sed -r ':1;N;$!b1;s/.*(#N.*Versi).*/\1/;s/\\/\n/g' i
  10. #N Geo
  11. m=AllCheck Guess=TCheck SCRF=Check GenChk RB3LYP/6-31G(d) Freq

  12. Title
  13. Card Required

  14. 0,1
  15. C,-2.6366683128,0.3811261006,0.
  16. H,-2.1080066854,-0.
  17. 5656603783,0.
  18. H,-3.7209494923,0.3661546899,0.
  19. C,-1.9629960799,1.547172
  20. 3156,0.
  21. C,-0.5247033184,1.5866019599,0.
  22. C,-2.6471313427,2.8129366249,0
  23. .
  24. N,0.6369191261,1.616062051,0.
  25. N,-3.2016942646,3.8340611864,0.

  26. Versi
  27. [root@localhost ~]#
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP