【发布时间】:2014-09-08 19:51:32
【问题描述】:
需要解析一些以空格(" ")作为分隔符的日志,并观察双引号或单引号。
例如
id=firewall time="2010-05-09 16:07:21 UTC" 1.1.1.1 ...
应该被解析为
id=firewall
time="2010-05-09 16:07:21 UTC"
1.1.1.1
日志是
- 很长而且
- 不一定是 key=value 格式
- 不一定是 csv 格式:
尝试使用 Text::CSV_XS 因为它比纯基于 perl 的解析器快得多。但是,以下代码没有达到我的预期,因为日志不是有效的 csv 字符串。
use Text::CSV_XS;
$a = 'id=firewall time="2010-05-09 16:07:21 UTC"';
$userDefinedSeparator = Text::CSV_XS->new({sep_char => " "});
print "$userDefinedSeparator\n";
$userDefinedSeparator->parse($a);
my $e;
foreach $e ($userDefinedSeparator->fields) {
print $e, "\n";
}
是否有可以解析上述日志的快速解析器?最好配置 Text::CSV_XS 来进行所需的解析。
感谢@ThisSuitIsBlackNot 建议重写此问题。
【问题讨论】:
-
说明日志不是什么是没有帮助的:“不一定是 key=value 格式”,“不一定是 csv 格式”我>。如果您想要有用的答案,您需要详细描述日志的格式。否则这个问题太宽泛而无法回答。
-
如果您正在寻找“更快”的解决方案,您应该提供一些基准速度示例进行比较。
-
这是一种标准的日志文件格式吗?如果是,是否有可以使用的现有解析器(即使它不在 perl 中)?
-
感谢大家观看。同意你的观点,这个问题的表述不是很清楚。速度要求是解析应该在几微秒内完成。理想情况下,我希望小于 1us,但这可能需要 XS 代码。
标签: perl