Chinaunix

标题: 切割文件 求教 [打印本页]

作者: skytalemcc    时间: 2014-10-10 23:24
标题: 切割文件 求教
有一个文件,我想把它切成多份。把多个以begin 开头的数据块切割出来
内容
begin  1234
122344
223233
2233
begin  24334
44
sdfsd
456dfg
sdf
begin sdfd3445
dsafwf
sdf4tr234
3fdf

输出结果为
begin  1234
122344
223233
2233
-----------------------------
begin  24334
44
sdfsd
456dfg
sdf
-------------
begin sdfd3445
dsafwf
sdf4tr234
3fdf
作者: skytalemcc    时间: 2014-10-10 23:27
补充一下 ,能不能输出结果为第几行到第几行 。
例如刚才就是1到4,5到9,10到13
作者: wiliiwin    时间: 2014-10-10 23:50
  1. # awk  '/^begin/{if(NR>1){print "-------"};print NR,$0;next}{print NR,$0;}'  15.txt
  2. 1 begin  1234
  3. 2 122344
  4. 3 223233
  5. 4 2233
  6. -------
  7. 5 begin  24334
  8. 6 44
  9. 7 sdfsd
  10. 8 456dfg
  11. 9 sdf
  12. -------
  13. 10 begin sdfd3445
  14. 11 dsafwf
  15. 12 sdf4tr234
  16. 13 3fdf
复制代码

作者: 李满满    时间: 2014-10-10 23:54
学生党:飘过~无聊用Python试试

  1. $ cat yhsafe.py
  2. #!/usr/bin/env python
  3. # -*- coding:utf-8 -*-
  4. "just for fun"

  5. import re
  6. import sys
  7. import fileinput
  8. for x in re.findall(r'^b[^b]*',open(sys.argv[1]).read(),re.M):
  9.         print x.split('\n')[0]
  10.         print '\n'.join(x.split('\n')[1:]),
  11.         print '-'*20

复制代码
测试:
$ ./yhsafe.py yhsafe.txt
begin  1234
122344
223233
2233
--------------------
begin  24334
44
sdfsd
456dfg
sdf
--------------------
begin sdfd3445
dsafwf
sdf4tr234
3fdf

--------------------

begin sdfd3445
dsafwf
sdf4tr234
3fdf

作者: reb00t    时间: 2014-10-11 02:26
  1. awk  -vRS='begin' 'NR>2{print RS,s"--------------------"}{s=$0}END{print s}'

  2. sed -rn '{1h;1!H;${g;s/\nbegin/\n-------------\nbegin/gp}}'  1
复制代码

作者: ly5066113    时间: 2014-10-11 08:24
回复 1# skytalemcc


try:
  1. awk '/begin/{if(NR>1)print "----- "n"-"NR-1" -----";n=NR}1;END{print "----- "n"-"NR" -----"}' file
复制代码

作者: yestreenstars    时间: 2014-10-11 09:01
  1. sed ':1;n;/^begin/s/^/------\n/;b1'
复制代码

作者: zxy877298415    时间: 2014-10-11 09:34
回复 1# skytalemcc
awk  -F "\n" -v RS="begin" -v ORS="-------\n"  'NR>1{if(!s) {s=1;print "begin"$0"------" s "-" NF-1;s=NF}
else {print "begin" $0 "------" s "-" NF-2+s;s+=NF-1} }' FILE


   
作者: stupid_lee    时间: 2014-10-11 09:52
  1. sed '2,${/begin/{x;p;x}}' cc01.txt |sed 's/^$/-----------/' -r
复制代码

作者: stupid_lee    时间: 2014-10-11 10:11
回复 7# yestreenstars

sed '2,${/begin/s/^/----------\n/}'   借鉴您的,不循环如何
   
作者: yestreenstars    时间: 2014-10-11 10:28
回复 10# stupid_lee

应该差不多~{:3_193:}
   
作者: tasteoftime_90    时间: 2014-10-11 17:01
awk 'BEGIN{RS="begin +"}{printf a;a=RT}{printf $0}{printf A;A="--------""\n"}'
作者: skytalemcc    时间: 2014-10-19 16:55
谢谢大家 你们太可爱了
作者: rulebook    时间: 2014-10-20 10:29
csplit file /begin/ {*} -s -n2 -f "file" -b "%02d.txt"
作者: toddhai    时间: 2016-05-06 11:06
  1. awk -vRS="begin" '$0{print RS $0"-----------------------------\n"}' urfile
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2