如何从时间戳中找到星期几

时间:2016-08-03 12:59:23

标签: regex logstash logstash-grok

我有一个像上面提到的时间戳2015-11-01 21:45:25,296。是否可以使用任何正则表达式或grok模式提取星期几(星期一,星期二等)。

提前致谢

3 个答案:

答案 0 :(得分:1)

如果你想使用ruby过滤器,这很容易。我很懒,所以我只是这样做。

这是我的过滤器:

filter { 

    ruby {
      code => "
        p = Time.parse(event['message']);
        event['day-of-week'] = p.strftime('%A');
      "
    }

}

'message'变量是包含时间戳

的字段

使用stdin和stdout以及你的字符串,你得到:

artur@pandaadb:~/dev/logstash$ ./logstash-2.3.2/bin/logstash -f conf2/
Settings: Default pipeline workers: 8
Pipeline main started
2015-11-01 21:45:25,296
{
        "message" => "2015-11-01 21:45:25,296",
       "@version" => "1",
     "@timestamp" => "2016-08-03T13:07:31.377Z",
           "host" => "pandaadb",
    "day-of-week" => "Sunday"
}

希望这就是你所需要的,

阿图尔

答案 1 :(得分:0)

你想要的是:

假设您的字符串为2015-11-01 21:45:25,296

mydate='2015-11-01'
date +%a -d ${mydate% *}

会给你你想要的东西。

答案 2 :(得分:0)

简短的回答不是,你不能。 根据{{​​3}}的正则表达式:

  

...是一系列字符,用于定义搜索模式,主要用于与字符串进行模式匹配,或字符串匹配,即“查找和替换”类操作。

因此,正则表达式允许您解析String,它会搜索String中的信息,但不会对其进行计算。 如果你想进行这样的计算,你需要编程语言(java,c#或Ruby [如@pandaadb建议]等)的帮助或其他一些进行这些计算的工具(Wikipedia)。