-1

我有 1 个文件,看起来像这样

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 来实现这个输出应该是这样的

公司 xyz

姓名 年龄 性别

沙亚姆 26 男

公羊 28 男


公司简介

位置编号

班加罗尔 26

钦奈 28

谢谢

4

1 回答 1

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
于 2010-06-01T15:36:48.493 回答