如何将我的linux文件拆分成多个文件?

时间:2015-01-08 08:28:50

标签: linux unix awk

我想将文件拆分为多个文件。我的意见是

Report : XYZ    Page: 1
ABC
DEF
GHI
JKL
   End of Report
$
Report : XYZ    Page: 1
ABC
DEF
GHI
JKL
$
Report : XYZ    Page: 2
ABC
DEF
GHI
JKL
   End of Report  
$
Report : XYZ    Page: 1
ABC
DEF
GHI
JKL
   End of Report
$

输出应为:

档案1

Report : XYZ    Page: 1
ABC
DEF
GHI
JKL
   End of Report
$

文件2

Report : XYZ    Page: 1
ABC
DEF
GHI
JKL
$

Report : XYZ    Page: 2
ABC
DEF
GHI
JKL
   End of Report  
$

档案3

Report : XYZ    Page: 1
ABC
DEF
GHI
JKL
   End of Report
$

我试过了

awk '{print $0 "Report :"> "/tmp/File" NR}' RS="END OF" test.txt

提到How can I split my file into multiple files?

使用

awk '/^Report/{filename++} {f="File"filename; if(lf != f) {close(lf); lf=f}} {print > f}' test.txt

但我没有得到合适的输出。

任何指导都将不胜感激。

3 个答案:

答案 0 :(得分:1)

另一种方式

awk '{print >"File"(i+=/Page: 1[^1-9]*/)}' file

答案 1 :(得分:0)

试试这个:

awk -v i=1 '{print > "File"i; if(/End of Report/)i++}' InputFile

虽然会产生1个额外的文件,但我希望这不是一个问题。

没有额外档案:

awk -v i=1 '{print > "File"i; if(/End of Report/)i++} END{system("rm File"i)}' InputFile

说明:

脚本将开始将每一行转发到File 1 (since i=1 set initially)。打印完每个End of Reporti is incremented以便从下一行开始,内容将转发到File2,依此类推,以获取其余的文件内容。将生成一个extra file,其中包含最后End of Report行之后的文件内容,如果有问题,可以轻松删除。

答案 2 :(得分:0)

试试这个,我稍微修改了一下

csplit input.txt '/Page: 1$/' '{*}'