1

以下は、正規表現/分割などの一部になる可能性のある繰り返し行を持つ単一の列の出力です.

グループ化された列をコンマ区切り形式に変換したいと思います。誰かがこれで私を助けることができますか?

前:

An instance of HostInfo
1=?  
2=?   
3=?    
4=?  
5=?
An instance of HostInfo
1=?
2=?
3=?
4=?
5=?

1, 1=?, 2=?, 3=?, 4=?, 5=?

2, 1=?, 2=?, 3=?, 4=?, 5=? 
4

3 に答える 3

3

Perlでの行処理は、レコード処理のインスタンスであることを覚えておく必要があります。また、レコード区切り文字をデータに合うものに設定できます。

ファイルに「AninstanceofHostInfo」という文字列が含まれているとすると、次のように実行できます

レコード区切り文字を設定することもできます。

use English qw<$RS>;
my $old_rs = $RS;
local $RS = "An instance of HostInfo\n";

次に、それらのチャンクでファイルを読み取ることができます。

while ( <$input> ) { 
    chomp; # removes record separator
    next unless $_;
    ...
}

次に、レコードを行に分割し、コンマで再結合できます。つまり、次の...とおりです。

say join( ', ', split $old_rs );
于 2013-02-13T23:22:20.760 に答える
0

これをやってみてください:

use strict; use warnings;

my ($count, $hash);

# magic diamond operator to read INPUT
while (<>) {
    # removes newlines
    chomp;
    # if the line contains /An instance/
    # incrementing $count and skipping this line
    do{ $count++; next } if /An instance/;
    # else add current line in a reference to an array
    push @{ $hash->{$count} }, $_;
}

# iterating over "instances"
foreach my $first_level (sort keys %$hash) {
    # finally we print the result by de-referencing the HASH ref
    print "$first_level ", join ", ", @{ $hash->{$first_level} }, "\n";
}

使用法:

perl script.pl < input_file.txt
于 2013-02-13T23:13:05.927 に答える
0

このようなものは機能しますか?

use strict;
use warnings;

undef $/;

my $output = <DATA>;

my @parts = split /An instance of HostInfo/m, $output;

my $ctr = 1;
for my $part (@parts) {
  my @lines = split "\n", $part;
  @lines = grep {$_} @lines;
  next unless @lines;
  s/^\s+//g for @lines;
  s/\s+$//g for @lines;
  print $ctr++, ', ', join(", ", @lines),"\n";
}

__DATA__
An instance of HostInfo
1=?  
2=?   
3=?    
4=?  
5=?
An instance of HostInfo
1=?
2=?
3=?
4=?
5=?

これにより、サンプル出力が単一の文字列に読み取られ、「HostInfo のインスタンス」で分割されます。次に、これらの各セグメントがループされ、行が分割され、トリミングされ、最後に再び結合されます。

于 2013-02-13T23:05:56.403 に答える