![](/img/trans.png)
[英]How to add an additional CSV Column populated with data from a substring search
[英]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.