0

我们如何从 DeNormalized 文本文件 1 构建 Normalized 表?

感谢您的回复/时间。

我们需要从 DeNormalized 文本文件构建一个 Normalized DB Table。我们探索了几个选项,例如 unix shell 和 PostgreSQL 等。我希望从这个社区中学习更好的解决方案。

输入文本文件是各种长度的逗号分隔记录。内容可能如下所示:

XXXXXXXXXX , YYYYYYYYYY, TTTTTTTTTTT, UUUUUUUUUU, RRRRRRRRR,JJJJJJJJJ
111111111111,   22222222222, 333333333333, 44444444, 5555555, 666666
EEEEEEEE,WWWWWW,QQQQQQQ,PPPPPPPP

我们喜欢标准化如下(Split & Pair):

XXXXXXXXXX , YYYYYYYYYY
TTTTTTTTTTT, UUUUUUUUUU
RRRRRRRRR,JJJJJJJJJ
111111111111,   22222222222
333333333333, 44444444
5555555, 666666
EEEEEEEE,WWWWWW
QQQQQQQ,PPPPPPPP

我们是否需要使用文本预处理和加载方法?

如果是,预处理的最佳方法是什么?

是否有任何单一的 SQL/Function 方法来获得上述内容?

感谢您的帮助。

4

2 回答 2

4

使用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]"记录设置为,或换行

于 2013-12-07T19:45:48.810 回答
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  

有什么想法可以进一步改进上述步骤吗?

感谢您的帮助。

于 2013-12-12T01:28:03.400 回答