在nifi中对流文件的内容应用字符串操作/数学操作



我有一个流文件进来,它有固定的宽度数据在以下格式:

ABC 0F 15343543543454434 gghhhhhg ABC 01 433534343434 hjvh

我想用以下格式输出数据:

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

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

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

处理十六进制数在当前版本的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

剩下的取决于你的用例(例如。它所在的字符集)。搜索值将为每个部分创建捕获组。然后,在替换值中,我利用Expression语言函数中的第二个值(十六进制数字的值)将其转换为进制10。"append"one_answers"prepend"的目的是在当前主机上只有小数/双进制数字接受十六进制数(我需要改进),所以我只是把它格式化为双进制。

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

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

Edit2:解决这个问题的提交已经合并到master,并且将在1.1+版本中:https://github.com/apache/nifi/commit/c4be800688bf23a3bdea8def75b84c0f4ded243d

相关内容

  • 没有找到相关文章

最新更新