我有一个很大的txt文件(〜1GB),其中包含特定文本。
文件内容示例:
Linux中是否有一种方法可以根据大小和出现的时间将此文件拆分为多个文件?
例如,我想将文件拆分为100 MB的文件,但是每个文件必须以特定字符开头,并且文件之前的最后一行必须是原始文件中该字符之前的行文件。 请注意,此字符在原始文件中经常存在,因此拆分文件的大小将匹配。
编辑:您可以从此处下载txt文件:[示例文件] [2]
答案 0 :(得分:1)
由于结果文件不完全匹配,因此regexp需要一些调整。将其运行为:perl scriptname.pl 更少的内存不足: 使用:python scriptname.py sample.txt
所有串联的文件都等于sample.txt #!/usr/bin/perl -w
use strict;
use IO::File;
my $all = join('', (<STDIN>));
my (@pieces) = ($all =~ m%([IZO]\(.*?\)\{.*?\r\n\}\r\n)%gsx);
my $n = 1;
my $FH;
foreach my $P (@pieces) {
if ($P =~ m%^I%) {
undef $FH;
$FH = IO::File->new(sprintf("> chunk%d", $n));
$n++;
}
print $FH $P;
}
#!/usr/bin/env python
import sys
def split(filename, size=100, outputPrefix="xxx"):
with open(filename) as I:
n = 0
FNM = "{}{}.txt"
O = open(FNM.format(outputPrefix, n), "w")
toWrite = size*1024*1024
for line in I:
toWrite -= len(line)
if line[0] == 'I' and toWrite < 0:
O.close()
toWrite = size*1024*1024
n += 1
O = open(FNM.format(outputPrefix, n), "w")
O.write(line)
O.close()
if __name__ == "__main__":
split(sys.argv[1])