我希望主题足够清楚,我在之前询问的 bin 中没有找到任何关于此的具体信息。我尝试过在 Perl 或 Python 中实现它,但我认为我可能太努力了。
是否有一个简单的 shell 命令/管道可以根据开始和结束的正则表达式将我的 4mb .txt 文件拆分为单独的 .txt 文件?
我在下面提供了一个简短的文件示例。因此您可以看到每个“故事”都以短语“X 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
...
预先感谢您的所有帮助。
罗斯
最佳答案
awk '/[0-9]+ of [0-9]+ DOCUMENTS/{g++} { print $0 > g".txt"}' file
OSX users will need
gawk
, as the builtinawk
will produce an error likeawk: illegal statement at source line 1
ruby (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
关于regex - 使用 BASH 中的 shell 脚本在正则表达式上将一个大的 txt 文件拆分为 200 个较小的 txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4952021/