我有一个原始的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 :(得分:0)
我们可以从使用量词和捕获组的简单表达式开始:
@Component({
selector: 'a-comp',
template: `<div></div>`
})
export class AComponent implements OnInit {
constructor( private authService: AuthService ) {}
ngOnInit() {
console.log('HOY', this.authService.getUser());
}
}
@Component({
selector: 'b-comp',
template: `<div></div>`
})
export class BComponent implements OnInit {
constructor( private authService: AuthService ) {}
ngOnInit() {
console.log('HOY', this.authService.getUser());
}
}
并替换为:
(.+,)([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
是我们具有新期望格式的组。
jex.im可视化正则表达式:
$1-$7
答案 1 :(得分:0)
如果可以使用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
答案 2 :(得分:0)
尽管两个现有答案都说明了如何通过正则表达式使用String解析来完成此任务,但是如果传入数据以任何方式更改,则这些解决方案的更改将相当复杂。问题是针对Apache NiFi,解决方案是将CSV数据视为记录,并使用UpdateRecord
处理器。该处理器允许您使用RecordPath语法来指定您感兴趣的字段(列),并用一个新值替换它,该值可以是静态的,也可以通过Expression Language确定。您可以使用#toDate
和#format
方法将字符串从输入格式转换为所需的格式(或直接插入分隔符)。