Tay*_*r R 1 regex unix perl file csplit
我试图拆分一个巨大的文本文件(约5亿行文本),这是非常规则的,看起来像这样:
-- Start ---
blah blah
-- End --
-- Start --
blah blah
-- End --
...
Run Code Online (Sandbox Code Playgroud)
其中......暗示重复模式,"blah blah"具有可变长度~2000行.我想分开第一个
-- Start --
blah blah
-- End --
Run Code Online (Sandbox Code Playgroud)
阻塞到一个单独的文件并从FASTEST中的原始文件中删除它(运行时,给定我将运行这么多次)可能的方式.
理想的解决方案是从原始文件中删除初始块并将其粘贴到新文件中,而不加载巨大的初始文件的尾部.
我用以下方式尝试了csplit:
csplit file.txt /End/+1
Run Code Online (Sandbox Code Playgroud)
这是一种有效的方法,但在时间上效率不高.
编辑:如果我们从文件中删除最后一个"开始结束"块而不是第一个块,是否有解决方案?
如果您希望从原始文件中删除开头,则您别无选择,只能读取和写入文件的其余部分.要删除结尾(正如您在编辑中所建议的那样),它可以更有效:
use File::ReadBackwards;
use File::Slurp 'write_file';
my $fh = File::ReadBackwards->new( 'inputfile', "-- End --\n" )
or die "couldn't read inputfile: $!\n";
my $last_chunk = $fh->readline
or die "file was empty\n";
my $position = $fh->tell;
$fh->close;
truncate( 'inputfile', $position );
write_file( 'lastchunk', $last_chunk );
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
223 次 |
最近记录: |