0

次の内容の出力ファイルがあります。「パターン」に基づいてブロックに分割し、配列に格納したい。

Sample output:
100 pattern
line 1
line 2
line 3
101 pattern
line 4
102 pattern   
line 5
line 6
 ...   

「パターン」 のn番目と ( n +1)番目の出現の間のコンテンツはブロックです。

Block 1:
100 pattern
line 1
line 2
line 3

Block 2:
101 pattern
line 4


Block 3:
102 pattern   
line 5
line 6

基本的に、行全体でパターンを検索し、その間のコンテンツを配列に格納しています。

perlで達成する方法を教えてください

4

2 に答える 2

3

パターンが単語を含む完全な行でありpattern(通常の行は含まない)、配列要素をブロック全体にする必要があると仮定します。

my @array;
my $i = 0;

for my $line ( <DATA> ) {
    $i++ if ( $line =~ /pattern/ );
    $array[$i] .= $line;
}

shift @array unless defined $array[0];  # if the first line matched the pattern
于 2012-05-17T11:00:02.547 に答える
1

あなたが回答を受け入れたことは知っていますが、データを読み込んで正規表現を使用してそれを分割する方法を示したかったのです。

#!/usr/bin/perl

use strict;
use warnings;

use 5.010;

my $input = do { local $/; <DATA> };

my @input = split /(?=\d+ pattern)/, $input;

foreach (0 .. $#input) {
  say "Record $_ is: $input[$_]";
}

__DATA__
100 pattern
line 1
line 2
line 3
101 pattern
line 4
102 pattern   
line 5
line 6
于 2012-05-17T13:40:36.450 に答える