我想将文件拆分为多个文件。我的意见是
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
但我没有得到合适的输出。
任何指导都将不胜感激。
答案 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 Report
,i is incremented
以便从下一行开始,内容将转发到File2
,依此类推,以获取其余的文件内容。将生成一个extra file
,其中包含最后End of Report
行之后的文件内容,如果有问题,可以轻松删除。
答案 2 :(得分:0)
试试这个,我稍微修改了一下
csplit input.txt '/Page: 1$/' '{*}'