Perl Split不会拆分成Array

时间:2014-05-01 20:33:18

标签: string perl split

我有一个文件,我必须按块(基于时间戳)读取块。所以我使用awk在两个时间间隔之间读取,然后我必须进一步处理数据。为此,我必须阅读我从awk Line By Line收到的字符串。当我使用新字符执行拆分时,它不会拆分,但只有所有字符串都保留在第一个字段中。我使用了不同的转义字符但没有任何成功。

我的主要目标是逐行读取字符串。

    $cmd = "awk '\$0>=from&&\$0<=to' from=\"$currentTime\" to=\"$nextTime\" Output.txt";
    $dataChunk = system ($cmd);
    my @lines = split /[\r\s\v\V\n]+/, $dataChunk;
    foreach my $line (@lines) {
        chomp;
        $timeStamp1 = (split /-/, $line)[1];
        print "\n$timeStamp1\n";
        exit;
    }

3 个答案:

答案 0 :(得分:6)

应该是,

my $dataChunk = qx($cmd);
my @lines = split /[\r\s\v\V\n]+/, $dataChunk;

因为system()返回值是程序的退出状态。

答案 1 :(得分:4)

问题在于system没有按照您的想法行事。 system将返回退出代码,而不是命令的标准输出。

对于命令的标准输出,您希望使用qx($cmd)(或使用命令周围的反引号)。

答案 2 :(得分:2)

当您只想在两个时间戳之间读取时,使用awk愚蠢:

use strict;
use warnings;
use autodie;
use feature qw(say);

use constant  TIMESTAMP_FILE => 'Output.txt';

my $current_time = ...;
my $next_time = ...;
open my $tstamp_fh, "<", TIMESTAMP_FILE;
while ( my $line = <$tstamp_fh> ) {
    chomp $line;   # Always chomp on a read!
    next if $line lt $current_time or $line gt $next_time;
    say (split /-/, $line)[1];   # Is this the first or second element of the array?
}

这样的事情。这有点难以辨别,因为我不知道你的文件是什么样的。

主要的是,当您使用Perl时,绝对不需要运行awk。无论Awk能做什么,Perl都可以。

如果你不是百分百确定如何做某事,你可以随时使用Perl附带的a2p程序将任何Awk程序翻译成Perl代码。