昨天我问了这个问题并得到了很多有用的答复,希望今天也是如此。这是我修改过的脚本。
#! /usr/bin/perl
use strict;
use warnings;
my $line;
my @array;
my $print;
open (OUT , ">","output.txt")or die "cant open: $!";
while ($line = <>){
chomp($line);
push(@array, $line);
if(@array == 250){
$print = print "[", join(",",@array), "]", "\n";
print OUT $print;
@array = []
}
}
最初我简单地说我需要将数组的前250个元素打印到文本文件中,并且该数组是从标准输入构建的。我没有说明的是,构建数组的输入可能包含数千行。从此输入创建数组的原因是,我可以将数组的大小限制为250个实体,然后将数组作为格式化字符串打印。然后我需要刷新数组并恢复构建输入的第251行,并继续对输入的其余部分执行此过程。让我们说输入是5k行,我希望我的输出是一个包含原始5k输入行的文本文件,但是分成由250个数组实体组成的字符串。
目前,脚本只是将数组打印到屏幕上,而“ouput.txt”里面只有一行:1111111
。
答案 0 :(得分:4)
$print = print "[", join(",",@array), "]", "\n";
print OUT $print;
在这里,您要将print的返回值分配给$ print,即1,因为打印成功。你想要做的是:
print OUT "[", join(",",@array), "]", "\n";
答案 1 :(得分:2)
这是另一个只是稍微修改你的脚本的选项:
use strict;
use warnings;
my @array;
local $" = ',';
while (<>) {
chomp;
push @array, $_;
if ( @array == 250 ) {
print "[@array]\n";
undef @array;
}
}
用法:perl script.pl Infile [>outFile]
最后一个可选参数将输出定向到文件。
变量$"
保存Perl的列表分隔符,该分隔符应用于插值数组,因此此处不需要join
。
希望这有帮助!
答案 2 :(得分:1)
#! /usr/bin/perl
use strict;
use warnings;
my $line;
my @array;
my $print;
open (OUT , ">","moloch_chunker_output.txt")or die "cant open: $!";
while ($line = <>){
chomp($line);
push(@array, $line);
if(@array == 250){
print OUT "[", join(",",@array), "]", "\n";
@array = ();
}
}
谢谢davs,修复了它。