【问题标题】:Log file parsing with Perl使用 Perl 解析日志文件
【发布时间】:2015-04-27 21:02:14
【问题描述】:
use strict;
use warnings;

my $file = 'tagged.txt';
open(my $info, '<', 'tagged.txt') or die $!;

while(my $line = <$info>){
    if ($line =~ /someString/){
        #
    } else if ($line =~ /someOtherString/){
        #
    }
    #...
}

close $info

所以我试图将一些野日志文件解析为格式良好的 .csv 文件。我想逐行查看日志文件并检查我想要的值/字符串之一是否出现在该行中。假设我们有这样的东西:

Aug 27 13:59:36 topas user.info POS[548]: 00:11:33.989304 <GPS> Input To Sensor Fusion - f64Longitude (deg) = 13286667

我感兴趣的值之一是例如 f64Longitude (deg),分别是出现在后面“f64Longitude (deg) =”的值。 我现在的问题是:我如何访问位于 我发现的一些正则表达式之后的字符串...

【问题讨论】:

  • 你的问题不是很清楚,贴出正确的输入数据,输出你期望的结果。
  • $1 - 见 stackoverflow.com/questions/7855637/… 您可能需要扩大搜索范围以包括 f64 之后的部分...如果这始终是 \n 之前的终止部分,您应该认为自己很幸运
  • 这可能是切线的,但如果' shou' shou'd be 'elsif',你会选择'else'

标签: perl


【解决方案1】:

只需指定您要查找的令牌并使用正则表达式组来检索匹配的部分。例如:

my $str = 'Aug 27 13:59:36 topas user.info POS[548]: 00:11:33.989304 <GPS> Input To Sensor Fusion - f64Longitude (deg) = 13286667';
if ($str =~ /f64Longitude \(deg\) = (\d+)/) {
    print $1;
}

#prints 13286667

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多