LINUX.ORG.RU

[perl] прочитать строки сежду секциями

 


0

1

Привет.

Есть файл следующего содержания:

#1
a
b
c

#2
d
e
f

Как проще всего засунуть в массивы то, что относится к каждой секции? Т.е., элементами массива @one должны быть 'a', 'b' и 'c', а элементами @two — 'd', 'e', 'f'.

★★★★★

I love C too much so

Я бы сделал через препроцессинг - вначале разбить по файлам то, что между пустыми строками стандартными утилитами, а дальше - дело технки

bk_ ★★
()
while (<DATA>)
{
	chomp;

	push @one, $_ if /(#1)/../^$/ and $_ and $_ ne $1;

	push @two, $_ if /(#2)/../^$/ and $_ and $_ ne $1;
}

__END__
#1
a
b
c

#2
d
e
f
ddt
()
my (@one, @two);
my @bind = (undef, \@one, \@two);
my $now;
while (<>) {
    if (/^#(1|2)/) {
        $now = $1;
        next;
    }
    push @{$bind[$now]}, $& if $now && /^\S+/;
}
arsi ★★★★★
()

однострок решает

perl -ne 'chomp && $_ and /^#(\d+)/ ? 1 : push @{$1}, $_' t.txt

Результаты в @1, @2 и т.д.

Olegymous ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.