在perl中如何在两行之间进行grep

在perl中如何在两行之间进行grep,perl,perl-module,Perl,Perl Module,我有一个像这样的文件 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.em

我有一个像这样的文件

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
COMPANY xyz Name Age Sex Shayam 26 Male Ram 28 Male COMPANY bgh Location Number Bangalore 26 Chennai 28 我想与xyz公司组成一个表,其中包含列名称、年龄、性别,还有一个表包含列位置和编号。 您能帮助我如何使用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
COMPANY xyz Name Age Sex Shayam 26 Male Ram 28 Male COMPANY bgh Location Number Bangalore 26 Chennai 28 xyz公司 姓名年龄性别 沙亚姆26男 公羊28公 bgh公司 位置号 班加罗尔26 钦奈28
谢谢

下面的粗略代码进行渐进匹配,即它向下移动字符串以提取所需的数据。类似代码可用于文件的第二部分:

#!/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
#/usr/bin/perl-w
严格使用;
使用警告;
我的$inline;
{
本地$/=undef;#打开slurp模式
$inline=;
}
打印“公司xyz\n名称年龄性别\n”#报表标题
$inline=~s/^COMPANY=xyz\n(.*)COMPANY=bhg/$1/msx#将多余的文本剥离到
$inline=~s/system\.employee\[\d+\]\.//gx#简化下面的渐进匹配
当(
$inline=~/
(?:#非捕获块的开始
名称=(.*)\n
年龄=(.*)\n
性别=(.*)\n
){1} #非捕获块结束(渐进匹配)
/gmx#g=渐进匹配,m=多行匹配x=注释
)
{
打印“$1$2$3\n”;
}
__资料__
公司=xyz
system.employee[0]。Name=shayam
system.employee[0]。年龄=26
system.employee[0]。性别=男性
system.employee[1]。Name=ram
system.employee[1]。年龄=28
system.employee[1]。性别=男性
公司=bhg
system.employee[0]。位置=班加罗尔
system.employee[0]。编号=26
system.employee[1]。位置=钦奈
system.employee[1]。编号=28

如果我将“COMPANY=”之间的行变灰,我可以实现这一点。如何在grep中grep两个关键字之间的行?可以添加所需的示例输出吗?输出应该是类似COMPANY=xyz Name Age sex shayam 26 Male Ram 28这样的表Male COMPANY=bhg位置号班加罗尔26钦奈28 ThanksI无法在此处设置视图。表名应该是company=xyz,列是name-Age-sex,条目应该出现在该列下。还有一个名为company=bhg的表,该表的列是Location和Number。编辑您的问题并添加所需的格式。