linux - 我们如何从 DeNormalized 文本文件 one 构建 Normalized 表?

标签 linux postgresql sed awk greenplum

我们如何从非规范化文本文件一构建规范化表?

感谢您的回复/时间。

我们需要从非规范化文本文件构建规范化数据库表。我们探索了几个选项,例如 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/Function 方法来获得上述内容?

感谢您的帮助。

最佳答案

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

关于linux - 我们如何从 DeNormalized 文本文件 one 构建 Normalized 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20445701/

相关文章:

mysql - 在 Linux 服务器上创建守护进程的最佳实践

database - Postgres 声称驱动器上的空间不足,可用空间充足

c# - 如何禁用 MARS 并规避 "MARS is not yet implemented"-exception”?

sql - 在 postgresql 表中存储带有引号或反斜杠等特殊字符的字符串

linux - 使用 sed 在文件中特定行的末尾添加包含斜杠的文本

Java 访问控制异常 : keeping getting File IO error when trying to write log file

python - 在ubuntu中打开spyder

linux - sed move 一行

bash - 如何为列表项生成唯一编号

linux - 如何使我的环境变量可用于 sudo 命令?