我怎样才能将我的文件分割成多个文件?

我想分割成多个文件的文件。 我的意见是

Report : 1 ABC DEF GHI JKL End of Report $ Report : 2 ABC DEF GHI JKL $ Report : 2 ABC DEF GHI JKL End of Report $ Report : 3 ABC DEF GHI JKL End of Report $ 

输出应该是:

文件1

 Report : 1 ABC DEF GHI JKL End of Report $ 

文件2

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

文件3

 Report : 3 ABC DEF GHI JKL End of Report $ 

我努力了

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

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

任何指导将不胜感激。

Solutions Collecting From Web of "我怎样才能将我的文件分割成多个文件?"

这是另一个awk的答案:

 awk '/^Report/{n=$3} {print > "File"n}' input 

这与nu11p01n73R的答案类似,但使用每个Report行的第三个字段来确定文件编号。

  • /^Report/匹配行时,集合n$3
  • 创建文件名时使用n来打印每一行

如果你有大量的这些块,你可能需要结束关闭文件,可以使用这个命令:

 awk '/^Report/{f="File"$3; if(lf != f) {close(lf); lf=f}} {print > f}' input 
  • /^Report/匹配行时,创建一个文件名f
  • 如果lf (最后一个文件名)与f不匹配,首先尝试关闭lf然后重新设置lf 。 当lf没有被设置时调用close()是安全的
  • 打印每一行f

你可以尝试类似的东西

 $awk '/^Report/{filename++} {print > "FILE"filename}' input 

测试

 $awk '/^Report/{filename++} {print > "FILE"filename}' input $ cat FILE1 Report : 1 ABC DEF GHI JKL End of Report $ $ cat FILE2 Report : 2 ABC DEF GHI JKL $ Report : 2 ABC DEF GHI JKL End of Report $ $ cat FILE3 Report : 3 ABC DEF GHI JKL End of Report $ 

它能做什么

  • /^Report/ pattern对于以Report开始的行是真实的,同一行中的第三个列中的数字是必须用作下一行的文件名的文件名

  • {filename++}将文件名值加1

  • {print > "FILE"filename}每行打印到文件中。

    例如,如果filename1那么这一行是相同的

     print > FILE1 

    这是输出重定向,这与在bash中使用的相同

    请注意,如果缺少属性,则不会print属性,然后awk输出整个记录。 这与写入print $0 > "FILE"filename

尝试这个,

 csplit input.txt '/End of Report$/' '{*}' 

说明

  • csplit是一个UNIX实用程序,用于将文件分割成由上下文行确定的两个或多个较小的文件。

  • input.txt这是将被拆分的文件。

  • '/End of Report$/'特定模式,如“报告结束”。

  • 指示整个文件的'{*}'选项。