我正在处理一个Perl脚本,该脚本处理来自ec2-describe-instances的输出,该输出返回其输出,如下所示:
INSTANCE\n
TAG\n
INSTANCE\n
TAG\n
INSTANCE\n
TAG\n
有没有办法可以使用split函数,以便将结果分成两个行块,如下所示?
INSTANCE\n
TAG\n
答案 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//,"";
。)