[英]How to convert a column in a csv file using Nifi?
我有一个原始的csv文件如下
SVEIS , SVESID,SVETIME
Quneter,53553,01122003010005
renchure,37151,12092008011005
现在我需要将数据从日月份更改为年日月份,如下所示
SVEIS , SVESID,SVETIME
Quneter,53553,2003-01-12 01:00:05
renchure,37151,2008-12-09 01:10:05
我需要使用NIFI来改变它
我使用了替换文本处理器,但我收到的错误就像无法处理nifi中的10条记录中的10条
我们可以从使用量词和捕获组的简单表达式开始:
(.+,)([0-9]{2})([0-9]{2})([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})
并替换为:
$1$4-$3-$2 $5:$6:$7
其中$1-$7
是我们的新格式组。
jex.im可视化正则表达式:
const regex = /(.+,)([0-9]{2})([0-9]{2})([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})/gm; const str = `Quneter,53553,01122003010005 renchure,37151,12092008011005`; const subst = `$1$4-$3-$2 $5:$6:$7`; // The substituted value will be contained in the result variable const result = str.replace(regex, subst); console.log(result);
如果可以使用awk
可以这样解决:
awk -F, '{
f1=substr($3,1,2);
f2=substr($3,3,2);
f3=substr($3,5,2);
f4=substr($3,7,2);
f5=substr($3,9,2);
f6=substr($3,11,2);
f7=substr($3,13,2)}
NR<2 {print $1,$2,$3;next}
{print $1,$2,f3 f4"-"f1"-"f2,f5":"f6":"f7}' file
SVEIS SVESID SVETIME
Quneter 53553 2003-01-12 01:00:05
renchure 37151 2008-12-09 01:10:05
虽然现有的两个答案都解释了如何通过正则表达式使用字符串解析来完成此任务,但如果传入数据以任何方式发生更改,那么这些解决方案将变得相当复杂。 问题出在Apache NiFi上,解决方案是将CSV数据视为记录并使用UpdateRecord
处理器。 此处理器允许您使用RecordPath语法指定您感兴趣的字段(列)并将其替换为新值,该值可以是静态的,也可以通过表达式语言确定。 您可以使用#toDate
和#format
方法将字符串从传入格式转换为所需格式(或直接插入分隔符)。
有很多关于使用RecordPath机制的 文章 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.