我有一个流文件,其中包含以下格式的固定宽度数据:
ABC 0F 15343543543454434 gghhhhhg
ABC 01 433534343434 hjvh
我希望以下列格式输出数据:
ABC|15|15343543543454434|gghhhhhg
ABC|1|433534343434|hjvh
要获得此输出,我需要将每行中的第二个字段转换为base10整数,并对所有其他字段应用条带操作以修剪空格。
我尝试使用replaceText处理器,但我找不到将第二个字段转换为base10整数或将strip函数应用于字符串字段的方法。
答案 0 :(得分:3)
在当前版本的NiFi中,使用十六进制数字并不容易。为了使其发挥作用,您需要使用其中一个脚本处理器ExecuteScript或InvokeScripted处理器。
也就是说,进行数值评估是我即将发布的版本(目前正在进行策划以最终确定)的重点之一,并且我已经能够创建仅涉及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