将字符串操作/数学运算应用于nifi中的流文件的内容

时间:2016-10-26 15:03:39

标签: apache-nifi

我有一个流文件,其中包含以下格式的固定宽度数据:

ABC 0F 15343543543454434 gghhhhhg ABC 01 433534343434 hjvh

我希望以下列格式输出数据:

ABC|15|15343543543454434|gghhhhhg ABC|1|433534343434|hjvh

要获得此输出,我需要将每行中的第二个字段转换为base10整数,并对所有其他字段应用条带操作以修剪空格。

我尝试使用replaceText处理器,但我找不到将第二个字段转换为base10整数或将strip函数应用于字符串字段的方法。

1 个答案:

答案 0 :(得分:3)

在当前版本的NiFi中,使用十六进制数字并不容易。为了使其发挥作用,您需要使用其中一个脚本处理器ExecuteScriptInvokeScripted处理器。

也就是说,进行数值评估是我即将发布的版本(目前正在进行策划以最终确定)的重点之一,并且我已经能够创建仅涉及ReplaceText处理器的解决方案。我使用了以下配置:

Search Value: ^(\w*)\ *(\w*)\ *(\d*)\ *(\w*)$
Replacement Value: $1|${'$2':prepend('0x'):append('p0'):toNumber()}|$3|$4
Replacement Strategy: Regex Replace
Evaluation Mode: Line-by-line

其余部分取决于您的用例(即,它所处的字符集)。搜索值将为每个部分创建捕获组。然后在替换值中,我利用表达式语言函数中的第二个(十六进制数字)来转换为基数10."追加"和" prepend"是在当前主要只有小数/双接受十六进制数字(我需要改进),所以我只是将它格式化为双。

所以不幸的是,这个用例目前还没有开箱即用,很快就会出现!

编辑:我创建了一个Jira来跟踪添加十六进制 - > EL中的整数:https://issues.apache.org/jira/browse/NIFI-2950

Edit2:解决该问题的提交已合并为master并将在版本1.1+中:https://github.com/apache/nifi/commit/c4be800688bf23a3bdea8def75b84c0f4ded243d