Logstash-来自CSV列的子字符串
我想将许多信息从CSV文件导入弹性搜索。 我的问题是我不知道如何使用等效的子字符串将信息选择到CSV列中 在我的例子中,我有一个字段日期(YYYYMMDD),我希望有一个字段日期(YYYY-MM-DD) 我使用过滤、变异、gsub等:Logstash-来自CSV列的子字符串,csv,filter,
elasticsearch,substring,logstash,Csv,Filter,
elasticsearch,Substring,Logstash,我想将许多信息从CSV文件导入弹性搜索。 我的问题是我不知道如何使用等效的子字符串将信息选择到CSV列中 在我的例子中,我有一个字段日期(YYYYMMDD),我希望有一个字段日期(YYYY-MM-DD) 我使用过滤、变异、gsub等: filter { mutate { gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789
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列date的第一个到第四个字符中选择date您可以使用
ruby
插件进行转换。正如您所说,您将有一个date
字段。因此,我们可以在ruby
中直接使用它
filter {
ruby {
code => "
date = Time.strptime(event['date'],'%Y%m%d')
event['date_new'] = date.strftime('%Y-%m-%d')
"
}
}
date\u new
字段是您想要的格式。您可以使用ruby
插件进行转换。正如您所说,您将有一个date
字段。因此,我们可以在ruby
中直接使用它
filter {
ruby {
code => "
date = Time.strptime(event['date'],'%Y%m%d')
event['date_new'] = date.strftime('%Y-%m-%d')
"
}
}
date\u new
字段是您想要的格式。您可以使用ruby
插件进行转换。正如您所说,您将有一个date
字段。因此,我们可以在ruby
中直接使用它
filter {
ruby {
code => "
date = Time.strptime(event['date'],'%Y%m%d')
event['date_new'] = date.strftime('%Y-%m-%d')
"
}
}
date\u new
字段是您想要的格式。您可以使用ruby
插件进行转换。正如您所说,您将有一个date
字段。因此,我们可以在ruby
中直接使用它
filter {
ruby {
code => "
date = Time.strptime(event['date'],'%Y%m%d')
event['date_new'] = date.strftime('%Y-%m-%d')
"
}
}
date\u new
字段是您想要的格式。首先,您可以使用regexp范围来匹配序列,而不是[0123456789],您可以执行[0-9]。如果您知道将有4个数字,您可以执行[0-9]{4}
其次,您希望“捕获”输入字符串的一部分并在输出中对其重新排序。为此,您需要捕获组:
([0-9]{4})([0-9]{2})([0-9]{2})
其中paren定义了组。然后您可以引用gsub右侧的组:
\1-\2-\3
\1是第一个捕获组,等等
当你做GROK {}时,你也可以考虑得到这三个字段,然后再把它们放在一起(也许是用AddiFieldfield)。
< P>首先,你可以使用一个ReGEXP范围来匹配一个序列,而不是[0123456789 ],你可以[0-9]。如果你知道有4个数字,你可以[09] { 4 }。 其次,您希望“捕获”输入字符串的一部分并在输出中对其重新排序。为此,您需要捕获组:([0-9]{4})([0-9]{2})([0-9]{2})
其中paren定义了组。然后您可以引用gsub右侧的组:
\1-\2-\3
\1是第一个捕获组,等等
当你做GROK {}时,你也可以考虑得到这三个字段,然后再把它们放在一起(也许是用AddiFieldfield)。
< P>首先,你可以使用一个ReGEXP范围来匹配一个序列,而不是[0123456789 ],你可以[0-9]。如果你知道有4个数字,你可以[09] { 4 }。 其次,您希望“捕获”输入字符串的一部分并在输出中对其重新排序。为此,您需要捕获组:([0-9]{4})([0-9]{2})([0-9]{2})
其中paren定义了组。然后您可以引用gsub右侧的组:
\1-\2-\3
\1是第一个捕获组,等等
当你做GROK {}时,你也可以考虑得到这三个字段,然后再把它们放在一起(也许是用AddiFieldfield)。
< P>首先,你可以使用一个ReGEXP范围来匹配一个序列,而不是[0123456789 ],你可以[0-9]。如果你知道有4个数字,你可以[09] { 4 }。 其次,您希望“捕获”输入字符串的一部分并在输出中对其重新排序。为此,您需要捕获组:([0-9]{4})([0-9]{2})([0-9]{2})
其中paren定义了组。然后您可以引用gsub右侧的组:
\1-\2-\3
\1是第一个捕获组,等等
你也可以考虑在你做GROK{}时得到这三个字段,然后再把它们放在一起(也许是用AddiFieldfield)。