【发布时间】:2014-06-18 10:16:24
【问题描述】:
我有一个文件,我必须逐块读取(基于时间戳)。所以我使用 awk 在两个时间间隔之间读取,然后我必须进一步处理数据。为此,我必须逐行阅读从 awk 收到的字符串。当我使用新字符执行拆分时,它不会拆分,但所有字符串都保留在第一个字段中。我使用了不同的转义字符,但没有任何成功。
我的主要目的是逐行读取字符串。
$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;
}
【问题讨论】:
-
只是为了确定,如果您打印该行,它会打印多行吗?还是单行?
-
当我执行 'more Output.txt' 时,它会打印多行
-
您确定要使用
system吗?你不应该使用qx($cmd)吗? -
Perl 部分是作为
awk-killer 编写的(不是100% 成功,因为awk仍然存在)。然而,如果你从 Perl 运行awk然后处理它的输出,你就“做错了”——Perl 可以自己管理awk所做的事情。 -
您还可以通过使用自定义单引号来避免命令分配中的所有反斜杠:
$cmd = q[awk '$0>=from&&$0<=to' from="$currentTime" to="$nextTime" Output.txt];— 其中q[…]是一种可能的自定义引号(括号对),或者您可以使用非-括号字符,如q%…%,用于任何未出现在正文中的方便字符。您也可以使用自定义双引号:qq[…]或qq%…%等。