我们如何从DeNormalized文本文件构建规范化表?
感谢您的回复/时间。
我们需要从DeNormalized文本文件构建规范化数据库表。我们探讨了几个选项,例如unix shell和PostgreSQL等。我正在寻找更好的想法来解决这个社区的决议。
输入文本文件是各种长度,带有逗号分隔的记录。内容可能如下所示:
XXXXXXXXXX , YYYYYYYYYY, TTTTTTTTTTT, UUUUUUUUUU, RRRRRRRRR,JJJJJJJJJ
111111111111, 22222222222, 333333333333, 44444444, 5555555, 666666
EEEEEEEE,WWWWWW,QQQQQQQ,PPPPPPPP
我们喜欢按如下方式进行标准化(拆分和配对):
XXXXXXXXXX , YYYYYYYYYY
TTTTTTTTTTT, UUUUUUUUUU
RRRRRRRRR,JJJJJJJJJ
111111111111, 22222222222
333333333333, 44444444
5555555, 666666
EEEEEEEE,WWWWWW
QQQQQQQ,PPPPPPPP
我们是否需要使用文本预处理和加载方法?
如果是,预处理的最佳方式是什么?
是否有任何单一的SQL /函数方法来实现上述目标?
感谢您的帮助。
答案 0 :(得分:3)
使用gnu awk
(由于RS)
awk '{$1=$1} NR%2==1 {printf "%s,",$0} NR%2==0' RS="[,\n]" file
XXXXXXXXXX,YYYYYYYYYY
TTTTTTTTTTT,UUUUUUUUUU
RRRRRRRRR,JJJJJJJJJ
111111111111,22222222222
333333333333,44444444
5555555,666666
EEEEEEEE,WWWWWW
QQQQQQQ,PPPPPPPP
{$1=$1}
清理并删除多余的空格
NR%2==1 {printf "%s,",$0}
打印奇数部分
NR%2==0
打印部分和新行
RS="[,\n]"
将记录设置为,
或换行符
答案 1 :(得分:1)
这是一个更新。这是我在Linux服务器上所做的。
sed -i 's/\,,//g' inputfile <------ Clean up lot of trailing commas
awk '{$1=$1} NR%2==1 {printf "%s,",$0} NR%2==0' RS="[,\n]" inputfile <----Jotne's idea
dos2unix -q -n inputfile outputfle <------ to remove ^M in some records
outputfile is ready to process as comma delimited format
是否有任何改善上述步骤的想法?
感谢您的帮助。