我有一个看起来像这样的文件
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
我希望与公司xyz组成一个表格,其中列名称,年龄,性别以及另一个表格列位置&数。 你能帮我解决一下使用perl的方法吗?输出应该是这样的
COMPANY xyz Name Age Sex Shayam 26 Male Ram 28 Male COMPANY bgh Location Number Bangalore 26 Chennai 28
由于
答案 0 :(得分: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