У меня есть каталог, полный файлов, содержащих записи, такие как:
FAKE ORGANIZATION
799 S FAKE AVE
Northern Blempglorff, RI 99xxx
01/26/2011
These items are being held for you at the location shown below each one.
IF YOU ASKED THAT MATERIAL BE MAILED TO YOU, PLEASE DISREGARD THIS NOTICE.
The Waltons. The complete DAXXXX12118198
Pickup at:CHUPACABRA LOCATION 02/02/2011
GRIMLY, WILFORD
29 FAKE LANE
S. BLEMPGLORFF RI 99XXX
Мне нужно удалить все записи с выражением Pickup at:CHUPACABRA LOCATION
.
«Разделитель записей»проблема : я не могу коснуться форматирования входного файла - оно должно быть сохранено как .Каждая запись разделена примерно 40+ новыми строками.
Вот несколько awk (это работает):
BEGIN {
RS="\n\n\n\n\n\n\n\n\n+"
FS="\n"
}
!/CHUPACABRA/{print $0}
Мой удар по perl:
perl -a -F\n -ne '$/ = "\n\n\n\n\n\n\n\n\n+";$\ = "\n";chomp;$regex="CHUPACABRA";print $_ if $_ !~ m/$regex/i;' data/lib51.000
Ничеговернулся.Я не уверен, как указать «разделитель полей» в Perl, кроме как в командной строке.Пробовал утилиту a2p - без кубиков.Для любопытных вот что он производит:
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z
# process any FOO=bar switches
#$FS = ' '; # set field separator
$, = ' '; # set output field separator
$\ = "\n"; # set output record separator
$/ = "\n\n\n\n\n\n\n\n\n+";
$FS = "\n";
while (<>) {
chomp; # strip record separator
if (!/CHUPACABRA/) {
print $_;
}
}
Это должно работать под чьей-то коробкой Windows, иначе я бы придерживался awk.
Спасибо!
Bubnoff
РЕДАКТИРОВАТЬ (РЕШЕНО) **
Спасибо, моб!Вот (рабочая) версия сценария Perl (скорректированный вывод a2p):
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z
# process any FOO=bar switches
#$FS = ' '; # set field separator
$, = ' '; # set output field separator
$\ = "\n"; # set output record separator
$/ = "\n"x10;
$FS = "\n";
while (<>) {
chomp; # strip record separator
if (!/CHUPACABRA/) {
print $_;
}
}
Не стесняйтесь публиковать улучшения или дополнения CPAN, которые делают это более идиоматичным и / или perl-ish.Спасибо!