0

次の perl コードについて助けが必要です。

#!perl -w
use strict;
use warnings;

open my $file, '<', 'ubb' or die $1;

my $spool = 0;
my @matchingLines;

while (<$file>) {
    if (/GROUPS/i) {
        $spool = 1;
        next;
    }
    elsif (/SERVERS/i) {
        $spool = 0;
        print map { "$_" } @matchingLines;
        @matchingLines = ();
    }
    if ($spool) {
        push (@matchingLines, $_);
    }
}
close ($file);

その出力を以下に示します。

ADM                     LMID=GW_S4_1_PM,GW_S4_2_BM
                        GRPNO=1

ADM_TMS                 LMID=GW_S4_1_PM,GW_S4_2_BM
                        GRPNO=2
                        TMSNAME=TMS

ADM_1                   LMID=GW_S4_1_PM
                        GRPNO=11

ADM_2                   LMID=GW_S4_2_BM
                        GRPNO=12

DMWSG_Gateway_1         LMID=GW_S4_1_PM
                        GRPNO=101
                        ENVFILE="../GW_S4.Gateway.envfile"

DMWSG_Gateway_2         LMID=GW_S4_2_BM
                        GRPNO=201
                        ENVFILE="../GW_S4.Gateway.envfile"

DMWSG_1                 LMID=GW_S4_1_PM
                        GRPNO=106

DMWSG_2                 LMID=GW_S4_2_BM
                        GRPNO=206

しかし、各行の最初の単語のみを取得したいと思います (例: ADM, ADM_TMS, ADM_1)。

このファイルには、ここに表示されている行の上下に多くの行があることに注意してください。GROUPSと の間にある行に対してのみこれを行いたいですSERVERS

4

3 に答える 3