2010-06-01 8 views
-1

j'ai 1 fichier qui ressemble à cecomment grep entre deux lignes en 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 

Je veux former une table avec la société xyz avec des colonnes Nom, âge, sexe et une autre table avec des colonnes Localisation & Numéro. Pouvez-vous me aider comment Acheive cela en utilisant perl La sortie devrait être comme ce

 
COMPANY xyz 

Name  Age Sex 

Shayam 26  Male 

Ram  28  Male 


COMPANY bgh 

Location  Number 

Bangalore  26 

Chennai  28 

Merci

+0

Si je salue les lignes entre "COMPANY =", je peux y parvenir. comment faire pour grep les lignes entre deux mots-clés dans grep? – Raj

+0

Pouvez-vous ajouter l'exemple de sortie requis? – Space

+0

ouput devrait être une table comme SOCIÉTÉ = xyz Nom Age Sexe Shayam 26 Homme Ram 28 Homme COMPANY = BHG Lieu Nombre Bangalore 26 Chennai 28 Merci – Raj

Répondre

1

Le code rugueux fait ci-dessous un match progressif à-dire qu'il se déplace vers le bas de la chaîne pour extraire les données que vous voulez. Un code similaire pourrait être utilisé pour la deuxième partie de votre fichier:

#!/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 
Questions connexes