0

我正在处理一个 Perl 脚本,该脚本处理来自ec2-describe-instances的输出,该脚本返回其输出,如下所示:

INSTANCE\n
TAG\n
INSTANCE\n
TAG\n
INSTANCE\n
TAG\n

有没有办法可以使用split函数,以便将结果分成两行块,如下所示?

INSTANCE\n
TAG\n
4

1 回答 1

1

第一个 arg ofsplit应该是分隔您想要返回的内容。

split /(?!^)(?=(?:.*\n.*\n)+\z)/, do { local $/; <> };

但这是非常低效的。


如果要输出到句柄,可以使用:

perl -pe'()=split//,""; print "\n" if $. % 2 == 1 && $. > 1'

这类似于:

()=split//,"";
while (<>) {
    print "\n" if $. % 2 == 1 && $. > 1;
    print;
}

(我强烈建议省略()=split//,"";。)

$.读取的最后一行的行号。


如果要输出到数组,可以使用:

()=split//,""; 
my @array;
my $buf;
while (<>) {
   $buf .= $_;
   if ($. % 2 == 1) {
      push @array, $buf;
      $buf = '';
   }
}

(我强烈建议省略()=split//,"";。)


如果您可以将所有内容加载到内存中,则可以使用

()=split//,"";
my @array = do { local $/; <> } =~ /\G.*\n.*\n/g;

(我强烈建议省略()=split//,"";。)

于 2013-07-16T18:24:04.513 回答