使用BASH中的shell脚本将大型txt文件拆分为正则表达式中的200个较小的txt文件

ros*_*ser 11 regex unix bash shell scripting

嗨,大家好,我希望这个主题足够清楚,我在前面提到过的bin中没有找到任何具体的内容.我试过在Perl或Python中实现它,但我想我可能会努力.

是否有一个简单的shell命令/管道将基于开始和结束正则表达式将我的4mb .txt文件拆分成单独的.txt文件?

我提供了以下文件的简短示例..因此您可以看到每个"故事"都以短语"X XXX of XXX DOCUMENTS"开头,可以用来分割文件.

我认为这应该很容易,如果bash不能这样做我会感到惊讶 - 比Perl/Py更快.

这里是:

                           1 of 999 DOCUMENTS


              Copyright 2011 Virginian-Pilot Companies LLC
                          All Rights Reserved
                   The Virginian-Pilot(Norfolk, VA.)

...



                           3 of 999 DOCUMENTS


                  Copyright 2011 Canwest News Service
                          All Rights Reserved
                          Canwest News Service

...
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

罗斯

kur*_*umi 22

awk '/[0-9]+ of [0-9]+ DOCUMENTS/{g++} { print $0 > g".txt"}' file
Run Code Online (Sandbox Code Playgroud)

OSX用户将需要gawk,因为内置awk将产生一个错误awk: illegal statement at source line 1

红宝石(1.9+)

#!/usr/bin/env ruby
g=1
f=File.open(g.to_s + ".txt","w")
open("file").each do |line|
  if line[/\d+ of \d+ DOCUMENTS/]
    f.close
    g+=1
    f=File.open(g.to_s + ".txt","w")
  end
  f.print line
end
Run Code Online (Sandbox Code Playgroud)


ℝap*_*ink 10

正如其他解决方案中所建议的那样,您可以使用csplit:

csplit csplit.test '/^\.\.\./' '{*}' && sed -i '/^\.\.\./d' xx*
Run Code Online (Sandbox Code Playgroud)

我还没有找到一种更好的方法来摆脱拆分文件中的怀旧分隔符.