3

昨天我问了这个问题,得到了很多有用的回复,希望今天也是如此。这是我修改后的脚本。

#! /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.

4

3 回答 3

4
$print = print "[", join(",",@array), "]", "\n";
print OUT $print;

这里将 print 的返回值赋给 $print,也就是 1,因为打印成功了。你想要做的是:

print OUT "[", join(",",@array), "]", "\n";
于 2013-11-05T15:32:37.997 回答
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此处不需要 '。

希望这可以帮助!

于 2013-11-05T19:28:47.113 回答
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,解决了。

于 2013-11-05T15:42:28.597 回答