将SQL插入脚本转换为CSV格式

时间:2015-08-15 15:46:30

标签: sql csv awk sed export-to-csv

我正在寻找awk命令或类似工具,将标准格式良好的SQL插入脚本转换为csv文件。
按标准来说,我的意思是任何地方都没有数据库供应商特定的东西 格式良好我指的是sql脚本的每一行都有一个完整的列设置要插入的情况,即使有NULL。插入字段的顺序也是相同的 示例输入SQL脚本:

INSERT INTO tbl VALUES (1, 'asd', 923123123, 'zx');
INSERT INTO tbl VALUES (1, NULL, 923123123, 'zxz');
INSERT INTO tbl VALUES (3, 'asd3', 923123123, NULL);

任选地:

INSERT INTO tbl (colA, colB, colC, colD) VALUES (1, 'asd', 923123123, 'zx');

预期输出应为csv文件:

1,'asd',923123123,'zx'
1,,923123123,'zxz'
3,'asd3',923123123,

寻找性能高效的解决方案。

2 个答案:

答案 0 :(得分:5)

尝试使用GNU grep和sed:

grep -oP '\(\K[^)]*(?=\);)' file | sed 's/NULL//g;s/ //g'

所有四行的输出:

1,'asd',923123123,'zx'
1,,923123123,'zxz'
3,'asd3',923123123,
1,'asd',923123123,'zx'

或仅与GNU sed:

sed 's/.*(\([^)]*\));/\1/;s/NULL//g;s/ //g' file

所有四行的输出:

1,'asd',923123123,'zx'
1,,923123123,'zxz'
3,'asd3',923123123,
1,'asd',923123123,'zx'

答案 1 :(得分:2)

awk -F'[()]' -v OFS=, '{gsub(/NULL|;/,"")}{gsub(/, /,",")}{print $(NF -1)}' file
1,'asd',923123123,'zx'
1,,923123123,'zxz'
3,'asd3',923123123,