免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文本分隔处理问题 [复制链接]

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

我想用shell 做个文本分隔例如一个文件含如下内容, 没思路了 请教下各位 谢谢。

  1. ------ START ------
  2. AAAAAAAAAAAAAA
  3. AAAAAAAAAAAAAA
  4. AAAAAAAAAAAAAA
  5. AAAAAAAAAAAAAA
  6. ------ END ---------
  7. ------ START ------
  8. BBBBBBB
  9. ------ END ---------
  10. ------ START ------
  11. CCCCCCC
  12. ------ END ---------
复制代码
通过shell想分隔成3个文件
文件1:
  1. ------ START ------
  2. AAAAAAAAAAAAAA
  3. AAAAAAAAAAAAAA
  4. AAAAAAAAAAAAAA
  5. AAAAAAAAAAAAAA
  6. ------ END ---------
复制代码
文件2:
  1. ------ START ------
  2. BBBBBBB
  3. ------ END ---------
复制代码
文件3
  1. ------ START ------
  2. CCCCCCC
  3. ------ END ---------
复制代码

论坛徽章:
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 [报告]
发表于 2016-01-08 17:19 |只看该作者
回复 1# Arthur_


    csplit

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
3 [报告]
发表于 2016-01-08 17:54 |只看该作者
  1. awk '/START/{f=FILENAME""++n}{print > f}' file
复制代码

论坛徽章:
1
技术图书徽章
日期:2016-02-03 16:35:25
4 [报告]
发表于 2016-01-08 19:04 |只看该作者
simon@kami:~/8.1.2016$ csplit testfile /START/ -n2 -s {*} -f file
simon@kami:~/8.1.2016$ ls
file00  file01  file02  file03  testfile

黑哥我根据你提醒做了一次,为啥会分割出4个文件file00 file01 file02 file03,而file00是空的,而file01 02 03是正确的结果

回复 2# blackold


   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
5 [报告]
发表于 2016-01-08 19:08 |只看该作者
csplit file /START/ -n2 -s {*} -f file -b "%02d"; rm -rf file00
命令解释
/[正则表达式]/ #匹配文本样式,比如/START/,从第一行到包含START的匹配行。
{*} #表示根据匹配重复执行分割,直到文件尾停止,使用{整数}的形式指定分割执行的次数。
-s #静默模式,不打印其他信息。
-n #指定分割后的文件名后缀的数字个数。比如01、02、03等。
-f #指定分割后的文件名前缀。
-b #指定后缀格式。比如%02d,类似于C语言中的printf参数格式。
rm -rf file00 #是删除第一个文件,因为分割后的的第一个文件没有内容,匹配的单词就位于文件的第一行中。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2016-01-08 21:17 |只看该作者
本帖最后由 sunzhiguolu 于 2016-01-08 22:11 编辑

回复 4# 陈卓文
  1. -z, --elide-empty-files    remove empty output files
复制代码
csplit file /START/ -f file -n2 -s {*} -z

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
7 [报告]
发表于 2016-01-08 22:37 |只看该作者
利用 csplit 能否得到这样的结果?
文件1:
  1. AAAAAAAAAAAAAA
  2. AAAAAAAAAAAAAA
  3. AAAAAAAAAAAAAA
  4. AAAAAAAAAAAAAA
复制代码
文件2:
  1. BBBBBBB
复制代码
文件3:
  1. CCCCCCC
复制代码

论坛徽章:
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 [报告]
发表于 2016-01-09 00:29 |只看该作者
回复 7# sunzhiguolu


$ awk -vF="F" -vN=1 -vD=1 'BEGIN{if(N=="")N=1}/^---+ +END +---+/{S=0;close(FN);N++}S{print $0 > FN}/^---+ +START +---+/{S=1;FN=F N;if(D)print FN}' FILE
F1
F2
F3

$ grep . F?
F1:AAAAAAAAAAAAAA
F1:AAAAAAAAAAAAAA
F1:AAAAAAAAAAAAAA
F1:AAAAAAAAAAAAAA
F2:BBBBBBB
F3:CCCCCCC
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP