如何拆分其他​​每一行?

时间:2013-07-16 18:13:31

标签: perl

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

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

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

INSTANCE\n
TAG\n

1 个答案:

答案 0 :(得分:1)

split的第一个arg应该是你想要归还的内容。

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//,"";。)