簡體   English   中英

Logstash-CSV列中的子字符串

[英]Logstash - Substring from CSV column

我想將許多信息從CSV文件導入到Elastic Search。 我的問題是我不知道如何使用等效的子字符串將信息選擇到CSV列中。

就我而言,我有一個字段日期(YYYYMMDD),而我想要一個(YYYY-MM-DD)。

我使用filter,mutate,gsub之類的方法:

filter 
{
  mutate 
  {
    gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]", "[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]"]
  }
}

但是我的結果是錯誤的。 我可以識別我的字符串,但是我不能提取其中的一部分。

我的目標是要有以下內容:

gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]","%{date}(0..3}-%{date}(4..5)-%{date}"(6..7)]

%{date}(0..3}:從csv列的第一個字符到第4個字符中選擇date

您可以使用ruby插件進行轉換。 如您所說,您將有一個date字段。 因此,我們可以直接在ruby使用它

filter {
    ruby {
        code => "
                date = Time.strptime(event['date'],'%Y%m%d')
                event['date_new'] = date.strftime('%Y-%m-%d')
        "
    }
}

date_new字段是您想要的格式。

首先,您可以使用正則表達式范圍來匹配序列,因此可以執行[0-9]而不是[0123456789]。 如果您知道會有4個數字,則可以執行[0-9] {4}。

其次,您要“捕獲”輸入字符串的一部分並在輸出中對其重新排序。 為此,您需要捕獲組:

([0-9]{4})([0-9]{2})([0-9]{2})

括號定義組。 然后,您可以在gsub的右側引用它們:

\1-\2-\3

\\ 1是第一個捕獲組,依此類推。

您可能還考慮在執行grok {}時獲取這三個字段,然后稍后再將它們放在一起(也許使用add_field)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM