Насколько вы старались в Perl?
Изменить Вот более быстрый метод. Он разбивает файл и печатает файлы деталей.
use strict;
use warnings;
my $count = 1;
open (my $file, '<', 'source.txt') or die "Can't open source.txt: $!";
for (split /(?=^.*\d+[^\S\n]*of[^\S\n]*\d+[^\S\n]*DOCUMENTS)/m, join('',<$file>))
{
if ( s/^.*(\d+)\s*of\s*\d+\s*DOCUMENTS.*(\n|$)//m )
{
open (my $part, '>', "Part$1_$count.txt")
or die "Can't open Part$1_$count for output: $!";
print $part $_;
close ($part);
$count++;
}
}
close ($file);
Это метод по строкам:
use strict;
use warnings;
open (my $masterfile, '<', 'yourfilename.txt') or die "Can't open yourfilename.txt: $!";
my $count = 1;
my $fh;
while (<$masterfile>) {
if ( /(?<!\d)(\d+)\s*of\s*\d+\s*DOCUMENTS/ ) {
defined $fh and close ($fh);
open ($fh, '>', "Part$1_$count.txt") or die "Can't open Part$1_$count for output: $!";
$count++;
next;
}
defined $fh and print $fh $_;
}
defined $fh and close ($fh);
close ($masterfile);
Используя sed
в системах Mac, Linux или UNIX, вы можете удалить строку с:
sed '/Char: [0-4][0-9][0-9]$/d' < inputfile.txt > outputfile.txt
Это соответствует всем числам 0-499, где это последний символ (фиксируется с помощью $
) на линии.