2010-06-01 4 views
-1

я получил 1 файл, который выглядит как этоткак Grep между двумя строками в Perl

COMPANY=xyz 
system.employee[0].Name=shayam 
system.employee[0].Age=26 
system.employee[0].sex=Male 
system.employee[1].Name=ram 
system.employee[1].Age=28 
system.employee[1].sex=Male 

COMPANY=bhg 
system.employee[0].Location=Bangalore 
system.employee[0].Number=26 
system.employee[1].Location=chennai 
system.employee[1].Number=28 

Я хочу, чтобы сформировать таблицу с компанией АБВ с колоннами имя, возраст, пол и еще один стол с колоннами Расположение & Номер. Можете ли вы помочь мне, как добиться этого с помощью Perl Вывод должен быть, как это

 
COMPANY xyz 

Name  Age Sex 

Shayam 26  Male 

Ram  28  Male 


COMPANY bgh 

Location  Number 

Bangalore  26 

Chennai  28 

Благодарности

+0

Если у меня есть линии между «COMPANY =», я могу добиться этого. как grep линии между двумя ключевыми словами в grep? – Raj

+0

Можете ли вы добавить требуемый объем выборки? – Space

+0

Ouput должна быть таблица, как COMPANY = хуг Имя Возраст Пол shayam 26 Мужской Ram 28 Male COMPANY = BhG адресный номер Бангалор 26 Ченнай 28 Спасибо – Raj

ответ

1

Грубая ниже код делает прогрессивный матч т.е. она движется вниз строку для извлечения данных, которые вы хотите. Аналогичный код может быть использован для второй части вашего файла:

#!/usr/bin/perl -w 
use strict; 
use warnings; 

my $inline; 
{ 
    local $/ = undef; #turn on slurp mode 
    $inline = <DATA>; 
} 

print "COMPANY xyz\nName Age sex\n"; #Report header 

$inline =~ s/^COMPANY=xyz\n(.*)COMPANY=bhg/$1/msx; #strip off surplus text to 
$inline =~ s/system\.employee\[\d+\]\.//gx; #simplify progressive match below 

while (
    $inline =~/
(?:     #start of non capturing block 
    Name=(.*)\n 
    Age=(.*)\n 
    sex=(.*)\n 
){1}   # end of non-capturing block (progressive match) 
/gmx # g=progressive match, m=multiline match x=comments 
) 
{ 
    print "$1 $2 $3\n"; 
} 

__DATA__ 
COMPANY=xyz 
system.employee[0].Name=shayam 
system.employee[0].Age=26 
system.employee[0].sex=Male 
system.employee[1].Name=ram 
system.employee[1].Age=28 
system.employee[1].sex=Male 

COMPANY=bhg 
system.employee[0].Location=Bangalore 
system.employee[0].Number=26 
system.employee[1].Location=chennai 
system.employee[1].Number=28 
Смежные вопросы